C#基础语法大全.docx
《C#基础语法大全.docx》由会员分享,可在线阅读,更多相关《C#基础语法大全.docx(17页珍藏版)》请在冰豆网上搜索。
C#基础语法大全
一,注释语句
/**//*注释语句包含在"反斜杠*"和"*反斜杠"中,
或者两个反斜杠和换行符之中,
或者三个反斜杠和换行符之中(可以被VS自动识别为文件注释以提取)
要注意注释中的\,该续行符会把下一行连上来一起注释掉出错。
*/
static
voidMain(string[]args)
{//语句块包含在{}中
intMyInterger;//语句以;结束
string MyString;/**////忽略空白字符(空格/回车/TAB)
MyInterger= 17;
}
//要注意防止注释嵌套出错,可用#if,#endif预处理语句。
二,数据类型
1,基本型/内置型 用户自定义型
A,内置类型:
CS使用.netFrameWork库中的数据类型
sbyte
=System.SByte,...
类型 字节数 解释
byte 1 无符号字节型
sbyte 1 有符号字节型
short 2 有符号短字节型
ushort 2 无符号短字节型
int 4 有符号整型
uint 4 无符号整型
long 8 有符号长整型
ulong 8 无符号长整型
float 4 浮点数
double 8 双精度数
decimal
8 固定精度数
string unicode字串型
char unicode字符型
bool 真假布尔型//只接受true和false两种值。
不接受任何整数类型。
B,用户定义类型包括:
类类型(class)
结构类型(struct)
接口类型(interface)
2,值类型(ValueTypes)和引用类型(ReferenceTypes)
A,值类型:
内存顺序分配在栈中。
他们包括:
所有基本或内置类型(不包括string类型)、结构类型、枚举类型(enumtype)
B,引用类型:
内存非线性分配在堆中,当它们不再被使用时CS通过垃圾收集器自动释放内存(C++用delete)。
它们使用new运算符来创建。
引用类型包括:
类类型、接口类型、象数组这样的集合类型类型、字串类型、枚举类型
结构型适于快速访问和拥有少量成员的数据类型。
如果涉及量较多,你应该创建一个类来实现他。
3,数据类型转换
隐式转换:
从低精度的转换到高精度的,所以不可能转换到char;另外可以把0隐式转换成枚举型,其他整数不行。
显式转换
static
voidMain(string[]args)
{
shortshortResult,shortVal= 4;
intintegerVal= 67;
longlongResult;
floatfloatVal=10.5F;
doubledoubleResult,doubleVal= 99.999;
stringstringResult,stringVal="17";
boolboolVal=true;
Console.WriteLine("VariableConversionExamples\n数据类型转换范例\n");
doubleResult=floatVal*shortVal;
Console.WriteLine("Implicit,->double:
{0}*{1}->{2}",floatVal,shortVal,doubleResult);
shortResult=(short)floatVal;
Console.WriteLine("Implicit,->short:
{0}->{1}",floatVal,shortResult);
stringResult=Convert.ToString(boolVal)+Convert.ToString(doubleVal);
Console.WriteLine("Explicit,->string:
\"{0}\"+\"{1}\"->{2}",boolVal,doubleVal,stringResult);
longResult=integerVal+Convert.ToInt64(stringVal);
Console.WriteLine("Mixed,->long{0}+{1}->{2}",integerVal,stringVal,longResult);
}
三,变量:
1,普通变量:
(1),命名规则:
字母或_或@+字母或_或数字(/用于转义,@用于逐个转义指定,@常用于保留关键字前以保持与其他语言兼容)
(2),声明变量:
变量类型变量名
变量赋值:
变量=要赋的值
C#变量被访问之前必须被初始化;否则编译时会报错。
因此,不可能访问一个未初始化变量(如不确定的指针、超出数组边界的表达式)。
变量在使用前最好习惯是要先声明和初始化。
(3)C#中没有全局的的变量或全局函数,全局方式的操作是通过静态函数和静态变量来实现的。
inti;
stringtext;//在循环外未初始化
for(i=
0;i<10;I++)
...{
text=
"Line"
+Convert.ToString(i);//在循环中未初始化,在退出循环的时候会丢失值,再引用就出错。
Console.WriteLine("{0},text);
}
Console.WriteLine("Lasttxetoutputinloop:
{0},text);//出错。
改正方法是在循环外初始化:
stringtext="";
(4)命名约定:
简单的用camelCase,复杂的用PascalCase
(5)变量的七种类型:
classA
...{
public
static
intx;//静态变量,存在期从类装载直到该程序结束。
inty;//非静态变量,或实例变量,从类实例创建到实例空间释放。
/**//*v[0]是数组元素,a是值参数,b是引用参数,c是输出参数*/
voidF(int[]v,inta,ref
intb,out
intc)...{
inti=
1;//局部变量,不会被初始化
c=a+b++;//
}
}
2,枚举
enum枚举名:
枚举值类型(默认是int,默认赋值0,1,2...)
{
枚举值1=...,
枚举值2=...,
枚举值3,//不赋值的话,默认为最后一个明确具体值的值+1
...
}
枚举名变量名=枚举名.枚举值
namespaceCh05Ex02
...{
enumorientation:
byte
...{
north=1,
south=2,
east=3,
west=4
}
/**////Class1'sDesciption
classClass1
...{
static
voidMain(string[]args)
...{
bytedirectionByte;
stringdirectionString;
orientationmyDirection=orientation.north;
Console.WriteLine("mydirection={0}",myDirection);
directionByte=(byte)myDirection;//因为enum存得下byte,所以理论上可以正确地反过来转换,但逻辑上不一定正确。
myDirection=(orientation)myByte;
directionString=Convert.ToString(myDirection);//等价命令是directionString=myDirection.ToString();
//因为不单是把枚举变量值转存到string变量中,所以不能用string(mydirection);
//反向转换命令是orientationmyDirection=(orientation)Enum.Parse(typeof(orientation),myString);但由于enum不一定存得下string,所以可能出错。
如myString赋值为North,就不能映射到orientation中的north,出错。
Console.WriteLine("byteequivalent={0}",directionByte);
Console.WriteLine("stringequivalent={0}",directionString);
}
}
}
3,结构
struct结构名:
{
访问方式1变量类型1变量名1;//访问方式public/private
访问方式2变量类型2变量名2;
...
}
结构名结构变量名;
结构变量名.枚举值=...;
4,一维数组
变量类型[]数组名=
new变量类型[元素个数]...{元素0,元素1,元素2...}//元素个数必须是整数或者整数常量,而且必须与后面的元素列值个数相同,否则出错。
元素个数的new声明和后面的元素列值可以只选一个,就能声明并初始化数组。
遍历方法
A,For循环到.Length
for(i=0,i...{
Console.WriteLine(friendNames[i]);
}
B,Foreach进行只读访问
foreach(stringlistNameinfriendNames)
...{
Console.WriteLine(listName);
}
5,二维数组(多维)
变量类型[,]数组名=
new变量类型[一维元素个数,二维元素个数]...{...{元素00,元素01,元素02...},...{元素10,元素11,元素12...}...}
6,直角数组(交错数组,数组中的数组)
7,字符串操作:
stringmyString=
"Ihaveadream.";
charmyChar=myString[2];//把string变量当作只读的char数组使用,不能改写myString[2]
char[]myChars=myString.ToCharArray();
char[]separator={'
'};//设定分隔符
string[]myWords=myString.Split(separator);//分隔成数组
Console.WriteLine("myStringhave{0}chars",myString.Length);
myString=myString.ToLower();//转小写
myString=myString.ToUpper();//转大写
myString=myString.Trim();//删前后空格
myString=myString.TrimStart();//删前空格
myString=myString.TrimEnd();//删后空格
myString=myString.PadLeft(位数);//前补空格到指定位数
myString=myString.PadRight(位数);//后补空格到指定位数
myString=myString.PadLeft(位数,字符);//前补指定字符到指定位数
char[]trimChars={"e","#","*"};
myString=myString.trim(trimChars);//删指定字符
四,常量:
ConstintintTwo=
2(必须声明的同时赋值)
五,运算符:
按优先级顺序排列
算术运算符:
前缀的++和--,前缀一元的+和-乘*除/求余%加+减-
位移运算符:
<<,>>
比较运算符:
小于<大于>小于等于<=大于等于>=
比较运算符:
==,!
=
逻辑运算符:
&
逻辑运算符:
^
逻辑运算符:
|
逻辑运算符:
&&
逻辑运算符:
||
比较运算符:
等于=
*=
/=
%=
+=
-=
<<=
>>=
&=
^= |=
后缀的++和--
六,名称空间
usingsystem; //system是.netFrameWork应用程序根命名空间,之后就能在全局名称空间引用system中的代码。
namespace空间名称
...{
using空间名称2.代码2;//之后就能在代码1处直接引用代码2
代码1;
namespace空间名称2
...{
代码2;
}
}
七,条件语句
A,If语句:
通用判断
If(条件1)
代码1;
Else
代码2;
If(条件1)
{}
Else
{}
B,Switch语句:
用于同条件多结果判断
Switch(条件)
...{
Case结果1:
代码1;
break;
Case结果2:
代码2;
break;
Case结果3:
代码3;
gotoCase 结果2;//此时Case..相当于一个Label
Case结果4:
代码4;
Return;
Case结果5:
Case结果6:
Case结果7:
代码567;//只要满足上面三个Case之一就执行。
break;
...
Default:
代码;
break;
}
C,三元运算语句:
(条件)?
True结果:
False结果
常用于简单赋值语句:
stringmyString=(myInteger<10)?
"Lessthan10":
"Greatthanorequalto";
或者用于简单格式化文本语句:
Console.WriteLine("Iam{0}year{1}old.",myinteger,myinteger==1?
"":
"s");
八,循环语句:
A,Do...While:
当条件为True时循环。
Do
...{...}
While(条件);//分号不可少
B,While...:
当条件为True时循环。
While(条件)
...{...}
C,For...:
使用计数器循环。
For(变量;条件;操作)//可以在此时声明变量,但作用域就仅限于循环内了。
...{...
Break;//跳出整个循环
Return;
Continue;//中止当前循环,继续下一个循环
Goto标签;//禁止从循环外部用goto跳入循环内部
}
九,函数
A,函数定义:
static返回值类型/void函数名(参数类型1参数1,参数类型2参数2,...)
...{
...
return返回值;//return必须在函数结束前被处理,不能跳过
//return;//当用于void时用不带返回值的return来中止函数。
}
B,参数数组:
static
intsumVals(params
int[]vals)
...{
intsum=0;
foreach(intvalinvals)
...{
sum+=val;
}
returnsum;
}
static
voidMain(string[]args)
...{
intsum=sumVals(1,5,2,9,8);
Console.WriteLine("SummedValues={0}",sum);
}
C,值传递参数/引用传递参数/out输出参数
static
voidshowDouble(ref
intval)//引用传递参数
...{
val*=2;
Console.WriteLie("valdoubled={0}",val);
}
static
voidshowDouble2(intval)//值传递参数
...{
val*=2;
Console.WriteLine("valdoubled={0}",val);
}
static
voidshowDouble3(intval,out
intvalIndex)//out输出参数
...{
val*=2;
valIndex++;
Console.WriteLine("valdoubled={0}",val);
}
intmyNmuber=5;
showDouble(refmyNumber);//引用传递参数,会改变myNumber值,所以要求myNumber必须不是常量或者未初始化的变量。
showDouble2(myNumber);//值传递参数,不会改变myNumber值
intvalindex;//out输出参数,不用初始化,初始化了也会在函数开始执行时丢失值。
showDouble3(myNumber,outvalIndex);
D,全局变量
static/const变量名//const定义的全局变量是只读的
当全局变量与局部变量同名时,局部变量优先,要用类似class1.myString来引用全局变量。
E,Main()函数;
static
voidMain()
static
voidMain(string[]args)//args是函数命令行参数
static
intMain()//返回一个表示函数终止状态的int值
static
intMain(string[]args)//返回一个表示函数终止状态的int值
F,结构中的函数
G,同名函数的重载:
同名,签名不同,系统自动识别使用哪个函数
H,委托:
用于把引用存储为函数以灵活调用函数
十,面向对象基础
十一,类
1,类的定义
class类名
...{
//类成员
}
internal/public
sealed/abstract
十和,接口
interfaceIMyInterface
...{
//接口成员
}
C#语法入门
下面开始C#之行。
在开始学习C#之前,先了解下C#语句的特点:
1.C#是区别大小。
2.每一句都以分号结束,不象VB.NET。
3.多个语句通过分号可以写在一行,不过不推荐,因为不清晰。
OK,开始了。
先了解下其数据类型:
booltrue或false
byte8位无符号整数
short16位整数
int32位整数
long64位整数
float32位浮点数
double64位浮点数
char16位字符
string多个16位字符
宽度窄的(即字节数少的)数据类型可以直接赋给较宽的数据类型,并会自动转换为新类型。
例:
floata=9.9f;
intb=4;
a=b;
//上述把一个整型的4转换成了浮点型.同样也可以通过强制类型转换将宽类型的缩成窄类型例:
floata=9.9f;
intb=4;
b=(int)a;
//注意必须把要转换的类型名称放在圆括号内,并放在其前面字符串与数值互换:
stringa=Convert.ToString(b);
floata=Convert.ToSingle(b);
同样也可以像C语言那样格式化输出:
floata=3.1415926728f;
stringb=a.ToString("##.##");
变量与常量声明:
C#中允许一条语句声明同一类型的多个变量
inta,b;
但为了语句清晰推荐将多个声明写成多个语句。
有一点要注意,就是如果在声明数值型变量时没有小数部分,则自动为整数类型,有小数部分的,则自动为double类型,而不是float类型,可通过下面声明,转换为不同类型:
floata=1.2f;longb=23L;
对于常量声明,习惯用大写符号来表示常数,如:
constfloatPI=3.1415926;
对于字符声明,得用单引号括起来,如:
chara=''d'';
还可以这样赋值:
inta=b=c=2;
虽然方便,但并不推荐,推荐将其拆成三个语句来写,这样结构也清晰。
(注:
C#的变量名长度是任意的,可以由数字和大小写字母混合组成,但第一个必须是字母。
关于C#中的转义字符:
\n-------------------------换行
\r-------------------------回车
\t-------------------------制表符
\b-------------------------退格
\f-------------------------换页
\0-------------------