第三章C#基础知识2目标在C#中定义变量和常量使用C#中的基本数据类型理解装箱和拆箱的概念使用C#中的运算符,选择结构和循环结构定义和使用数组,了解结构和枚举3C#程序结构程序从Main()处开始执行关键字using可以引用Microsoft.NET框架类库中的现有资源语句就是在C#应用程序中执行操作的指令程序由许多不同的语句构成使用分号隔离语句使用大括号组合语句usingSystem;classHelloWorld{staticvoidMain(){Console.WriteLine(Hello,World);}}4在C#中设置代码格式使用缩进帮助说明语句所处的层次大小写敏感忽略空白间隔使用(//)书写不跨行的注释使用(/*)和(*/)书写多行注释usingSystem;classHelloWorld{staticvoidMain(){Console.WriteLine(Hello,World);}}5内置数据类型用于定义变量的类型存储不同类型的变量根据想要表示数据的不同,选择不同的数据类型预定义数据类型是由C#语言和.NET框架提供允许自定义变量在使用前必须先声明6C#数据类型C#数据类型大小默认值示例int有符号的32位整数0intrating=20;float32位浮点数,精确到小数点后7位0.0Ffloattemperature=40.6F;byte无符号的8位整数0bytegpa=2;short有符号的16位整数0shortsalary=3400;long有符号的64位整数0Llongpopulation=23451900;bool布尔值,true或falseFalseboolIsManager=true;stringUnicode字符串-stringcolor=“Orange”Char单个Unicode字符‘\0’chargender=‘M’;7变量语法:访问修饰符数据类型变量名PublicPrivateProtectedintstringfloat……变量用于存储特定数据类型的值8其他的两种访问限制符Internal一个程序集中可以使用Protectedinternal本程序集的类和这些类的子类使用如果变量前没有访问修饰符,则默认为internal9声明并初始化变量声明指定类型指定变量名以分号结束intnumberOfVisitors;初始化变量使用赋值运算符(=)指定值以分号结束123123赋值附加后缀1decimaldeposit=100M;stringbear;stringbear=Grizzly;10变量举例staticvoidMain(string[]args){//声明布尔型、字符串型、整型、短整型和浮点型变量booltest=true;shortnum1=19;intnum2=14000;stringval=Jamie;floatnum3=14.5f;//显示变量值Console.WriteLine(布尔值=+test);Console.WriteLine(短整型值=+num1);Console.WriteLine(整型值=+num2);Console.WriteLine(字符串值=+val);Console.WriteLine(浮点值=+num3);}变量中存储的值取决于该变量的类型11声明及初始化字符串示例声明字符串使用转义符使用verbatim字符串国际Unicode标准strings=HelloWorld;//HelloWorldstrings=Hello\nWorld;//anewlineisaddedstrings=@Hello\n;//Hello\nstrings=\Hello\;//HelloThecharacter“A”isrepresentedby“U+0041”12常量语法:const数据类型常量名=常量值;PublicPrivateProtected常量用于在整个程序中将数据保持同一个值声明常量时必须对其赋值13常量举例staticvoidMain(string[]args){//PI常量PIconstfloat_pi=3.14F;//由地球引力引起的加速度常量,单位为cm/s*sconstfloat_gravity=980;//钟摆的长度intlength=40;//钟摆的周期doubleperiod=0;//钟摆周期的计算公式period=2*_pi*Math.Sqrt(length/_gravity);Console.WriteLine(钟摆的周期为{0}秒,period);}声明常量在表达式中使用常量const关键字用于声明常量14C#的基本数据类型3-1C#中的数据类型分为两个基本类别值类型-表示实际数据-只是将值存放在内存中-值类型都存储在栈中-简单类型(int、char等)、结构、枚举15引用类型-表示指向数据的指针或引用-包含内存堆(托管堆)中对象的地址-为null,则表示未引用任何对象-类、接口、数组、字符串例如:strings1,s2;s1=ABCD;s2=s1;其中,s1、s2是指向字符串的引用变量,s1的值是字符串''ABCD''存放在内存的地址,这就是对字符串的引用,两个引用型变量之间的赋值,使得s2、s1都是对''ABCD''的引用16C#的基本数据类型3-2staticvoidMain(string[]args){//声明一个值类型的整型数据类型intval=100;Console.WriteLine(该变量的初始值为{0},val);Test(val);//由于该数据类型属于值类型,所以将恢复其初始值Console.WriteLine(该变量的值此时为{0},val);}staticvoidTest(intgetVal){inttemp=10;getVal=temp*20;}将val的初始值传递给Test()方法被传递的val在Test()方法内被改变不反映已经改变的val值,而保留原始值17C#的基本数据类型3-3staticvoidMain(string[]args){DataTypeTestobjTest=newDataTypeTest();objTest.Val=100;//传递属于引用类型的对象Test(objTest);//由于该数据类型属于引用类型,所以会考虑新处理的值Console.WriteLine(变量的值为{0},objTest.Val);}staticvoidTest(DataTypeTestdataTest){inttemp=10;dataTest.Val=temp*20;}将DataTypeTest的引用传递给Test()被传递的val在Test()中改变反映已经改变的val值,而不保留原始值classDataTypeTest{publicintVal;}18staticvoidMain(string[]args){DataTypeTesta=newDataTypeTest();DataTypeTestb=a;b.Val=10;Console.WriteLine(a={0},b={1},a.Val,b.Val);Console.ReadKey();}19类型转换隐式转换由编译器自动完成,但必须确保不会丢失信息显式转换需要明确要求编译器完成的转换,否则可能会丢失信息intx=123456;//intisa4-byteintegerlongy=x;//implicitconversiontoalongintx=65537;shortz=(short)x;//explicitconversiontoashort,z==120装箱和拆箱2-1装箱是将值类型转换为引用类型拆箱是将引用类型转换为值类型可以把值类型与引用类型的值赋给object类型变量,C#用“装箱”和“拆箱”来实现值类型与引用类型之间的转换。,拆箱必须显示进行21“装箱”就是将值类型包装成引用类型的处理过程。当一个值类型被要求转换成一个object对象时,“装箱”操作自动进行,它首先创建一个对象实例,然后把值类型的值复制到这个对象实例,最后由object对象引用这个对象实例。显示装箱objecti=(object)1装箱可以隐式进行22例如:usingSystem;classDemo{publicstaticvoidMain(){intx=123;objectobj1=x;//装箱操作x=x+100;//改变x的值,此时obj1的值并不会随之改变Console.WriteLine(x={0},x);//x=223Console.WriteLine(obj1={0},obj1);//obj1=123}}23“拆箱”操作与“装箱”相反,它是将一个object类型转换成值类型。首先检查由object引用的对象实例值类型的包装值,然后把实例中的值复制到值类型的变量中。24usingSystem;classDemo{publicstaticvoidMain(){intx=123,y;objectobj1=x;//装箱操作x=x+100;//改变x的值,此时obj1的值并不会随之改变y=(int)obj1;//拆箱操作,必须进行强制类型转换Console.WriteLine(x={0},x);//x=223Console.WriteLine(obj1={0},obj1);//obj1=123}}25装箱和拆箱2-2intval=100;objectobj=val;Console.WriteLine(“对象的值={0},obj);intval=100;objectobj=val;intnum=(int)obj;Console.WriteLine(num:{0},num);值类型引用类型拆箱装箱值类型引用类型值类型被装过箱的对象才能被拆箱26运算符和表达式9-1运算符和表达式Result=number*100变量变量常量操作数表达式操作数和运算符的组合运算符27运算符和表达式9-2类别运算符说明表达式算术运算符+执行加法运算(如果两个操作数是字符串,则该运算符用作字符串连接运算符,将一个字符串添加到另一个字符串的末尾)操作数1+操作数2-执行减法运算操作数1-操作数2*执行乘法运算操作数1*操作数2/执行除法运算操作数1/操作数2%获得进行除法运算后的余数操作数1%操作数2++将操作数加1操作数++或++操作数--将操作数减1操作数--或--操作数~将一个数按位取反~操作数28运算符和表达式9-3类别运算符说明表达式三元运算符(条件运算符)?:检查给出的第一个表达式expression是否为真。如果为真,则计算operator1,否则计算operator2。这是唯一带有三个操作数的运算符表达式?操作数1:操作数229运算符和表达式9-4类别运算符说明表达式比较运算符检查一个数是否大于另一个数操作数1操作数2检查一个数是否小于另一个数操作数1操作数2=检查一个数是否大于或等于另一个数操作数1=操作数2=检查一个数是否小于或等于另一个数操作数1=操作数2==检查两个值是否相等操作数1==操作数2!=检查两个值是否不相等操作数1!=操作数230运算符和表达式9-5类别运算符说明表达式成员访问运算符.用于访问数据结构的成员数据结构.成员赋值运算符=给变量赋值操作数1=操作数2逻辑运算符&&对两个表达式执行逻辑“与”运算操作数1&&操作数2||对两个表达式执行逻辑“或”运算操作数1||操作数2!对两个表达式执行逻辑“非”运算!操作数()将操作数强制转换为给定的数据类型(数据类型)操作数31运算符和表达式9-6赋值运算符(=)变量=表达式;例如:身高=177.5;体重=78;性别=“m”;32运算符和表达式9-7一元运算符(++/--)Variable++;相当于Variable=Variab