资源描述
$1 绪论绪论我们所学语言的具体区别与应用我们所学语言的具体区别与应用n以移动互联网应用为例以移动互联网应用为例什么是什么是3GnG,Generation的缩写,中文为代的缩写,中文为代n3G,通常指,通常指 第三代移动通信第三代移动通信n1G,模拟技术,模拟技术n2G,数字技术,低速率,数字技术,低速率n2.5G,数字技术,中速率,数字技术,中速率n3G,数字技术,高速率,数字技术,高速率3G典型业务应用移动IM手机炒股移动飞信地图导航移动办公 手机音乐手机图书 移动浏览器 车次查询 手机杀毒移动资讯 手机电视移动互联网应用开发核心技术移动互联网应用开发核心技术nJ2ME开发开发nJAVA、J2ME、MIDP、数据结构、数据结构nJAVAWEB、数据库、数据库nAndroid开发开发nJAVA、数据结构数据结构nJAVAWEB、数据库、数据库、Android/Ophone系统平台系统平台nWindows mobile开发开发nC#、winForms、ASP.NET数据结构数据结构compactframework、.netmicroframework、WindowsMobile系统平台系统平台nWinPhone 7开发开发nC#、winForms、ASP.NET数据结构数据结构nRIA、Silverlight、XNA、WPF iPhoneiPhoneAndroid主流手机操作系统主流手机操作系统3G应用提供商移动互联网行业结构及就业企业硬件供应商运营商C#程序开发程序开发n开发环境开发环境-net 环境环境 micro soft visual studio 2003,2005,2008能为能为C#提供运行时环境(提供运行时环境(CLR公共语言运行时)公共语言运行时)n语言:语言:C#语言语言n硬件支撑硬件支撑n能完成的应用:能完成的应用:主要主要Web应用开发应用开发.NET技术.NET技术.NET版本1.01.12.03.03.5CLR版本1.01.12.02.02.0C#版本1.01.12.02.03.0绪论开始编写C#应用程序n第一个第一个C#C#应用程序应用程序nDemo:P1_1Demo:P1_1C#应用程序基本结构应用程序基本结构using System;namespace P1_1 class FirstProgram public static void Main(string args)Console.WriteLine(Welcome to.NET!);Console.Read();第一种形式:编写代码:记事本第一种形式:编写代码:记事本,生生成成*.cs.cs编译:编译:csc p1-1.cscsc p1-1.cs运行:运行:p1-1p1-1第二种形式第二种形式 :环境环境程序集命名空间类主方法n程序集、命名空间程序集、命名空间程序集是程序集是程序运行和发布的最小单位程序运行和发布的最小单位例:例:using System;using p1-1;见例见例p1-2命名空间命名空间:是是C#C#代码的基本组织形式,类、结构等代码的基本组织形式,类、结构等各种类型定义都包含在命名空间中,各种类型定义都包含在命名空间中,namespace P1_1n类型、类和方法类型、类和方法n程序主方法程序主方法n程序注释程序注释C#程序基本结构程序基本结构关于csc.exe编译器的主要选项n见教材7页n演示csc/debug+/optimize+/out:firstprograme.exe p1-1.csn 注意事项:两个符号之间一定要有空格:如+/开始编写C#应用程序n控制台交互程序控制台交互程序nDemo:P1_4Demo:P1_4开始编写C#应用程序nWindowsWindows窗体应用程序窗体应用程序nDemo:P1_6,P1_7Demo:P1_6,P1_7C#语言nC#C#语言特性语言特性n简洁的语法简洁的语法n精心的面向对象设计精心的面向对象设计n与与WebWeb的紧密结合的紧密结合n完整的安全性与错误处理完整的安全性与错误处理n版本处理技术版本处理技术n灵活性与兼容性灵活性与兼容性C#语言nC#2.0 C#2.0 新增特性新增特性n泛型泛型n可空类型可空类型n遍历器遍历器n匿名方法匿名方法n分部类型分部类型nC#3.0 C#3.0 新增特性新增特性n类型推理类型推理nLambdaLambda表达式表达式n扩展方法扩展方法n对象创建表达式对象创建表达式n匿名类型匿名类型n分部方法分部方法第二讲第二讲 C#数据类型数据类型n值类型值类型简单类型:整数、字符、实数、布尔简单类型:整数、字符、实数、布尔复合类型:结构、枚举复合类型:结构、枚举n引用类型:引用类型:类、接口、委托、数组类、接口、委托、数组整数类型数据类型数据类型说明说明取值范围取值范围对应对应System程序集中的结构程序集中的结构sbyte有符号8位整数-128127SBytebyte无符号8位整数0255Byteshort有符号16位整数-32,76832,767Int16ushort无符号16位整数065,535UInt16int有符号32位整数-2,147,483,6482,147,483,647Int32uint无符号32位整数04,294,967,295UInt32long有符号64位整数-9,223,372,036,854,775,8089,223,372,036,854,775,807Int64ulong无符号64位整数018,446,744,073,709,551,615UInt64字符类型n字符类型字符类型(char)(char)对应对应.NET.NET类库中的类库中的System.CharSystem.Charnchar x=char x=a a;char y=;char y=;char z=;char z=共共;n单引号表示字符类型,双引号表示字符串类型单引号表示字符类型,双引号表示字符串类型(string)(string)n反斜杠反斜杠“”用来引导转义字符用来引导转义字符nC#C#采用采用UnicodeUnicode字符集,单个汉字也可以作为字符字符集,单个汉字也可以作为字符来使用来使用转义符转义符字符名字符名转义符转义符字符名字符名转义符转义符字符名字符名转义符转义符字符名字符名单引号f换页0空字符t水平tab”双引号n新行a警报/响铃v垂直tab斜杠r回车b退格实数类型(1)ndoubledouble取值范围最大,常用于科学计算取值范围最大,常用于科学计算n实数变量默认是实数变量默认是doubledouble类型类型ndecimaldecimal精度最高,常用于统计、金融、财会等商业运算精度最高,常用于统计、金融、财会等商业运算n声明声明floatfloat和和decimaldecimal类型,要在小数后分别加上类型,要在小数后分别加上F F和和M Mndouble x=1.2;float y=1.2F;decimal z=double x=1.2;float y=1.2F;decimal z=1.2M;1.2M;nSystem.Single,System.Double,System.DecimalSystem.Single,System.Double,System.DecimalnNaN,PositiveInfinity,NegativeInfinityNaN,PositiveInfinity,NegativeInfinity数据类型数据类型说明说明取值范围取值范围float32位单精度实数1.510-453.41038double64位双精度实数5.010-3241.710308decimal128位十进制实数1.010-287.91028实数类型(2)属性类型NaNPositiveInfinityNegativeInfinitySystem.Single非数值正无穷大负无穷大System.Double非数值正无穷大负无穷大System.Decimal非数值正无穷大负无穷大布尔类型n布尔类型布尔类型(bool)(bool)的变量取值只能是的变量取值只能是truetrue或或falsefalsenboolbool类型对应类型对应.NET.NET类库中的类库中的System.BooleanSystem.Booleannboolbool类型与其他类型不存在对应关系类型与其他类型不存在对应关系结构类型(1)n结构类型结构类型(struct)(struct)是一种复合类型,属于值类型是一种复合类型,属于值类型nC#C#中定义结构类型的语法与中定义结构类型的语法与C/C+C/C+类似,但结尾没类似,但结尾没有分号有分号“;”n结构类型的成员可以是值类型或引用类型结构类型的成员可以是值类型或引用类型n不像不像C/C+C/C+,C#C#的结构类型定义可以放在其使用之的结构类型定义可以放在其使用之处的后面处的后面n结构类型定义中可以有结构类型或枚举类型结构类型定义中可以有结构类型或枚举类型n对结构成员的访问用圆点连接符对结构成员的访问用圆点连接符nDemo:P2_4,P25Demo:P2_4,P25结构类型(2)nstruct Contactstruct Contactn npublic string m_name;public string m_name;npublic int m_age;public int m_age;npublic string m_telephone;public string m_telephone;npublic Address m_address;public Address m_address;npublic struct Addresspublic struct Addressn npublic string m_city;public string m_city;npublic string m_street;public string m_street;npublic int m_number;public int m_number;n n 枚举类型n枚举类型枚举类型(enum)(enum)的成员只能是整数类型的成员只能是整数类型n枚举类型的变量在某一时刻只能取其中某个成员枚举类型的变量在某一时刻只能取其中某个成员的值的值n对枚举成员的访问用圆点连接符对枚举成员的访问用圆点连接符n第一个枚举元素默认对应整数值第一个枚举元素默认对应整数值0 0enum WeekdaySunday,Monday,Tuesday,Wednesday,Thursday,Friday,SaturdayC#数据类型n引用类型引用类型类类接口接口委托委托数组数组 C#数据类型引用(class)值(Struct)分配动态,堆静态缺省值null零值化=赋值引用拷贝值拷贝变量地址实际值i:123i:123s sHello worldHello worldintint i=123;i=123;j:123j:123t tint j=i;int j=i;string t=s;string t=s;string s=Hello world;string s=Hello world;类(1)鸟类天鹅麻雀鸵鸟蝙蝠白天鹅?图1.关于鸟的面向对象层次关系类(2)n下面哪些是鸟类的本质特征?下面哪些是鸟类的本质特征?nA.A.飞翔飞翔nB.B.卵生卵生nC.C.有坚硬的、角质的喙有坚硬的、角质的喙nD.D.两个前肢进化成带羽毛的翼两个前肢进化成带羽毛的翼nE.E.颜色颜色nF.F.体重体重nB,C,DB,C,D是标识鸟类本质的特征。是标识鸟类本质的特征。类(3)n类是一组具有相同数据结构和操作的对象的集类是一组具有相同数据结构和操作的对象的集合合n类可以创建很多实例,也叫做类可以创建很多实例,也叫做“对象对象”n类有数据成员(字段)、函数成员(方法)类有数据成员(字段)、函数成员(方法)n创建类实例必须用关键字创建类实例必须用关键字newnew,因为类是引用,因为类是引用类型类型n类可以被继承,被继承的类称为类可以被继承,被继承的类称为“基类基类”或或“父类父类”n实施继承的类称为实施继承的类称为“派生类派生类”或或“子类子类”nObjectObject类、类、StringString类、类、ToStringToString方法方法类(4)nDemo:P2_6Demo:P2_6n派生类:派生类:nclass Colleague:Contactclass Colleague:Contactn npublic string m_Fax;public string m_Fax;n 接口(1)n接口是对一组能提供相同服务的类或结构的抽接口是对一组能提供相同服务的类或结构的抽象象n接口是表示一组函数成员而不实现成员的引用接口是表示一组函数成员而不实现成员的引用类型类型n接口是一种抽象的数据类型,不能被实例化接口是一种抽象的数据类型,不能被实例化n接口可以被实现,只有类和结构才能实现接口接口可以被实现,只有类和结构才能实现接口n类或接口都可以对接口进行继承类或接口都可以对接口进行继承n如果基类和接口被继承,基类要写在接口之前如果基类和接口被继承,基类要写在接口之前n接口本身可以有任意的访问修饰符号接口本身可以有任意的访问修饰符号n接口成员是隐式接口成员是隐式publicpublic,不允许有任何访问修,不允许有任何访问修饰符,包括饰符,包括publicpublic接口(2)IBankBankCardILoanCreditCard见教材P31P32代码委托(1)n委托类似于委托类似于C/C+C/C+的函数指针的函数指针n使用委托的过程分使用委托的过程分3 3步:定义、实例化和调步:定义、实例化和调用用n委托的定义使用委托的定义使用delegatedelegate关键字关键字n委托的实例化使用委托的实例化使用newnew关键字关键字n所引用的方法的参数列表和返回类型都要与委所引用的方法的参数列表和返回类型都要与委托的定义一致托的定义一致n调用委托与调用方法相似调用委托与调用方法相似委托(2)n/委托类型委托类型MDelegateMDelegate的定义:的定义:ndelegate void MDelegate(uint i);delegate void MDelegate(uint i);n/委托类型委托类型MDelegateMDelegate的实例化:的实例化:nMDelegate md=new MDelegate md=new MDelegate(card1.Deposit);MDelegate(card1.Deposit);nmd(100);md(100);/调用委托调用委托n/将委托指向将委托指向WithdrawWithdraw方法:方法:nmd=new MDelegate(card1.Withdraw);md=new MDelegate(card1.Withdraw);nmd(50);md(50);/调用委托调用委托nDEMO:DEMO:教材教材P33P35,P2_8P33P35,P2_8数组(1)n一维数组一维数组n定义:定义:T array-name;T array-name;n初始化:初始化:array-name=new Tsize;array-name=new Tsize;n访问数组元素:访问数组元素:n定义定义 +初始化初始化 +赋值:赋值:T array-name=const-exp;T array-name=const-exp;nDemo:P36_ArrayDemo:P36_Array数组(2)nint array1;int array1;/定义一维整数数组定义一维整数数组nint array1=new int3;int array1=new int3;/定义并初始化定义并初始化n/对数组元素进行赋值:对数组元素进行赋值:narray10=1;array11=2;array12=4;array10=1;array11=2;array12=4;n/定义定义 +初始化初始化 +赋值:赋值:nint array1=new int 1,2,4;int array1=new int 1,2,4;n/上一行代码也可以这样写:上一行代码也可以这样写:nint array1=1,2,4;int array1=1,2,4;数组(3)n规则多维数组(规则多维数组(2 2维)维)n定义:定义:T,array-name;T,array-name;n初始化:初始化:array-name=new T,;array-name=new T,;n访问数组元素:访问数组元素:,n定义定义 +初始化初始化 +赋值:赋值:T,array-name=const-exp;T,array-name=const-exp;nDemo:P2_9Demo:P2_9C#数据类型n类型转换类型转换n值类型值类型值类型值类型低精度类型低精度类型高精度类型高精度类型:隐式转换:隐式转换(P40,(P40,表表2.5)2.5)高精度类型高精度类型低精度类型低精度类型:显式转换:显式转换(P41,(P41,表表2.6)2.6)Demo:P2_10,P2_11Demo:P2_10,P2_11C#数据类型n类型转换类型转换n引用类型引用类型引用类型引用类型派生类型派生类型基类型基类型:隐式转换:隐式转换基类型基类型派生类型派生类型:显式转换:显式转换nullnull可以赋给任何一种引用类型的变量可以赋给任何一种引用类型的变量数组数组Demo:P2_13Demo:P2_13C#数据类型n类型转换类型转换n值类型值类型引用类型引用类型值类型值类型引用类型引用类型:隐式转换(装箱):隐式转换(装箱)引用类型引用类型值类型值类型:显式转换(拆箱):显式转换(拆箱)Demo:P2_14,P2_15Demo:P2_14,P2_15C#数据类型int i=123;int i=123;object o=i;object o=i;int j=(int)o;int j=(int)o;i:123i:123o oSystem.InSystem.Int32t32装箱装箱j:j:123123System.OSystem.Objectbject123123拆箱拆箱System.InSystem.Int32t32C#程序设计基础程序设计基础$3$3 成员、变量和常量成员、变量和常量成员、变量和常量n成员类型成员类型n字段字段n方法方法n嵌套成员嵌套成员 字段n字段可以是值类型,也可以是引用类型字段可以是值类型,也可以是引用类型n在类中定义字段时可以为其定义默认值在类中定义字段时可以为其定义默认值n如果既没有在类中为字段定义默认值,也如果既没有在类中为字段定义默认值,也没有在实例中为字段赋值:那么字段被赋没有在实例中为字段赋值:那么字段被赋予其类型的默认值:予其类型的默认值:0/false/null0/false/null等。等。方法(1)n方法签名方法签名(Method Signature)(Method Signature):n方法名方法名 +参数列表参数列表n不包括返回值类型不包括返回值类型n形式参数(形参)和实际参数(实参)形式参数(形参)和实际参数(实参)n值传递和引用传递值传递和引用传递nDemo:P3_1Demo:P3_1方法(2)nC#C#方法可接受的参数:方法可接受的参数:n普通参数普通参数n引用参数引用参数(ref)(ref)n输出参数输出参数(out)(out)n数组型参数数组型参数(params)(params)单个数组变量,引用传递单个数组变量,引用传递多个数组元素,值传递多个数组元素,值传递Demo:P3_2Demo:P3_2方法(3)n方法重载是指可以存在方法名相同而参数列表方法重载是指可以存在方法名相同而参数列表不同(参数数量不同或参数类型不同)的一组不同(参数数量不同或参数类型不同)的一组方法。方法。n如果方法签名不同,就可以进行方法重载如果方法签名不同,就可以进行方法重载n/允许有下面的两种重载形式:允许有下面的两种重载形式:npublic static void FA(ref int x,ref public static void FA(ref int x,ref int y)int y)npublic static void FA(int x,int y)public static void FA(int x,int y)n/ref/ref和和outout的参数都是引用参数,不足以的参数都是引用参数,不足以区别方法:区别方法:npublic static void FC(int a,ref int public static void FC(int a,ref int b)b)npublic static void FC(int a,out int public static void FC(int a,out int b)b)嵌套成员在类或结构的定义中可以包含对其他类、结在类或结构的定义中可以包含对其他类、结构和枚举的定义构和枚举的定义只有将嵌套类型设置为只有将嵌套类型设置为publicpublic,外部定义的,外部定义的其他类才能使用该嵌套类型其他类才能使用该嵌套类型成员、变量和常量n成员访问限制成员访问限制nprivateprivatenpublicpublicnprotectedprotectedninternalinternalnprotected internalprotected internalprivaten未加访问限制修饰符的成员默认为未加访问限制修饰符的成员默认为privateprivaten命名空间中定义的类型无法显式声明为命名空间中定义的类型无法显式声明为privateprivate、protectedprotected或或protected protected internalinternaln类或结构中声明的类或结构中声明的privateprivate成员,只有其所成员,只有其所在的类或结构中的其他方法成员可以访问,在的类或结构中的其他方法成员可以访问,无法从类或结构的外部进行访问无法从类或结构的外部进行访问n嵌套成员中的嵌套成员中的privateprivate成员,与嵌套成员并成员,与嵌套成员并列的其他成员无法访问列的其他成员无法访问nDemo:private_demoDemo:private_demopublicn类或结构中声明的类或结构中声明的publicpublic成员,自身成员成员,自身成员和外部成员均可访问和外部成员均可访问n命名空间中定义的类型如果声明为命名空间中定义的类型如果声明为publicpublic,就可以从外部程序集访问,就可以从外部程序集访问n外部程序集中要使用外部程序集中要使用usingusing语句引入该命名空间语句引入该命名空间n同时需要在编译前添加对程序集的引用同时需要在编译前添加对程序集的引用nDemo:public_demoDemo:public_demoprotectednprotectedprotected只能用于类的成员只能用于类的成员nprotectedprotected对结构的成员和命令空间中直接对结构的成员和命令空间中直接定义的类型无效定义的类型无效n只有只有protectedprotected成员所在的类及其派生类中成员所在的类及其派生类中的成员可以访问的成员可以访问protectedprotected成员成员nprotectedprotected成员无法从类的外部进行访问成员无法从类的外部进行访问nDemo:protected_demoDemo:protected_demointernalninternalinternal可以用于类和结构的成员和命名可以用于类和结构的成员和命名空间下直接定义的类型空间下直接定义的类型ninternalinternal的类型或成员,在本程序集内自的类型或成员,在本程序集内自由访问,对其他程序集隐藏由访问,对其他程序集隐藏nDemo:P3_3,P3_4Demo:P3_3,P3_4protected internalnprotected internalprotected internal只能用于类的成员只能用于类的成员nprotected internalprotected internal是是protectedprotected和和internalinternal的并集的并集nprotected internalprotected internal成员对所有继承该类成员对所有继承该类的类和所有程序集内部的类可见的类和所有程序集内部的类可见访问限制符说明代码npublic class MyClass public class MyClass npublicpublicintint Member1;Member1;nprivateprivateintint Member2;Member2;nprotectedprotectedintint Member3;Member3;ninternalinternalintint Member4;Member4;nprotected internalprotected internalintint Member5;Member5;n 访问限制符的图示图1.访问性的区域划分public图示图2.公有类的公有成员对同一个程序集或其他程序集的所有类可见private图示图3.任何类的私有成员只对它自己的类(或嵌套类)的成员可见protected图示图4.公有类的受保护成员对它自己的类的成员或派生类的成员可见,派生类甚至可以在其他程序集中internal图示图5.内部成员对同一程序集内部的任何类的成员可见,但对程序集外部的类不可见protected internal图示图6.公有类的受保护内部成员对相同程序集的类的程序或继承该类的类的成员可见,它对其他程序集中不继承该类的类不可见访问被访问同一程序集内的类不同程序集内的类非派生派生非派生派生privateinternalprotectedprotected internalpublic表1.成员可访问性的总结访问限制符的表格总结成员、变量和常量n静态成员和非静态成员静态成员和非静态成员n实例调用实例调用n类型调用类型调用nDemo:P3_5Demo:P3_5n静态成员属于类型本身所有静态成员属于类型本身所有n非静态成员,属于类型的实例所有非静态成员,属于类型的实例所有nC#C#通过通过staticstatic关键字定义静态成员关键字定义静态成员n非静态方法可以直接调用静态和非静态成员非静态方法可以直接调用静态和非静态成员n静态方法可以直接调用静态成员静态方法可以直接调用静态成员n静态方法调用非静态成员需要通过实例进行静态方法调用非静态成员需要通过实例进行成员、变量和常量n变量变量n先定义后使用!先定义后使用!n声明声明n初始化初始化n赋值赋值nDemo:P3_6Demo:P3_6变量(1)n变量的种类变量的种类n静态变量静态变量n实例变量实例变量n数组元素数组元素n数值参数数值参数n引用参数引用参数n输出参数输出参数n局部变量局部变量变量(2)n变量的初始化变量的初始化n静态变量和实例变量:静态变量和实例变量:定义时初始化一个默认值定义时初始化一个默认值创建实例时进行赋值创建实例时进行赋值n声明数组元素时对各个元素进行初始化声明数组元素时对各个元素进行初始化否则每个元素也会被赋予数组元素的德默认值否则每个元素也会被赋予数组元素的德默认值n数值参数和引用参数的初始化由实参变量完成数值参数和引用参数的初始化由实参变量完成n输出参数在方法内部进行赋值输出参数在方法内部进行赋值n局部变量:局部变量:如果不初始化就不会获得默认值如果不初始化就不会获得默认值在使用前必须赋值在使用前必须赋值成员、变量和常量n常量常量nconstconstnreadonlyreadonlyDemo:P3_7Demo:P3_7const常量nconstconst常量必须在定义时赋值常量必须在定义时赋值n编译时编译时constconst常量的值已经固定常量的值已经固定n类似于静态变量,但不能用类似于静态变量,但不能用staticstatic修饰修饰n一般为值类型,如果为引用类型则只能初一般为值类型,如果为引用类型则只能初始化为始化为nullnulln不允许定义一个维数、长度和元素值都固不允许定义一个维数、长度和元素值都固定的常量数组定的常量数组readonly常量nreadonlyreadonly常量的赋值方式有两种:常量的赋值方式有两种:n在字段定义时赋值在字段定义时赋值n在类或结构的构造函数中进行初始化在类或结构的构造函数中进行初始化n值在程序运行中首次使用时确定值在程序运行中首次使用时确定n既可以是静态的,也可以是非静态的既可以是静态的,也可以是非静态的n既可以是值类型,也可以是引用类型既可以是值类型,也可以是引用类型nDemo:P3_7Demo:P3_7C#程序设计基础程序设计基础$4$4 操作符和表达式操作符和表达式操作符的种类n操作符操作符n一元操作符:一元操作符:op xop xn二元操作符:二元操作符:x x op yop yn三元操作符:三元操作符:?:?:n 操作符的优先级算术表达式n基本算术运算基本算术运算n枚举运算枚举运算n模运算模运算(%)(%)n+/-+/-操作符操作符nDemo:P74,Demo:P7_4()Demo:P74,Demo:P7_4()基本算术运算n任何数除以常数任何数除以常数0 0都是不合法的都是不合法的n除以值为除以值为0 0的变量是合法的的变量是合法的n整数变量除以值为整数变量除以值为0 0的变量抛出异常的变量抛出异常n实数变量除以值为实数变量除以值为0 0的变量结果是无穷大的变量结果是无穷大nC#C#中有中有+0+0和和-0-0之分,但之分,但+0+0和和-0-0相等相等n正无穷大和负无穷大不相等正无穷大和负无穷大不相等nP74,Demo:P7_4()P74,Demo:P7_4()枚举运算n加减法作用于枚举类型,默认的操作是将加减法作用于枚举类型,默认的操作是将枚举类型转换为整数类型,执行完加减法枚举类型转换为整数类型,执行完加减法后再将结果重新转换为枚举类型后再将结果重新转换为枚举类型模运算n整数和实数类型都可进行模运算整数和实数类型都可进行模运算n模运算结果的类型与精度高的操作数的类模运算结果的类型与精度高的操作数的类型相同型相同n5%3=25%3=2n5%1.5=0.55%1.5=0.5+/-操作符n+和和-是一元操作符是一元操作符n前缀操作符:先增减,后使用前缀操作符:先增减,后使用n后缀操作符:先使用,后增减后缀操作符:先使用,后增减nDemo:P79,P4_6Demo:P79,P4_6位运算n与与(&)(&)、或、或(|)(|)、非、非()()、异或、异或()()n与、或、异或操作符为二元运算符与、或、异或操作符为二元运算符n非操作符为一元运算符非操作符为一元运算符n移位运算移位运算n左移位操作符左移位操作符()()()n 非操作符()n非操作符为一元操作符非操作符为一元操作符n以下类型进行运算,返回类型与操作数相以下类型进行运算,返回类型与操作数相同:同:nint/uint/long/ulong/enumint/uint/long/ulong/enumn以下类型也可进行运算,返回类型为以下类型也可进行运算,返回类型为int/uintint/uint:nsbyte/byte/short/ushort/charsbyte/byte/short/ushort/char与(&)、或(|)、异或()操作符n三种操作符均为二元操作符三种操作符均为二元操作符n以下类型进行运算,返回类型与操作数相以下类型进行运算,返回类型与操作数相同:同:nint/uint/long/ulong/enum/boolint/uint/long/ulong/enum/booln异或的规则:异或的规则:n00=0,01=1,10=1,11=000=0,01=1,10=1,11=0n相同为相同为0 0,不同为,不同为1 1移位操作符()n左操作数为:左操作数为:int/uint/long/ulongint/uint/long/ulongn右操作数只能为右操作数只能为intint,表示所移位数,表示所移位数n移位运算的返回类型与左操作数相同移位运算的返回类型与左操作数相同n左移位:高位舍弃,低位补左移位:高位舍弃,低位补0 0n右移位:低位舍弃,高位补右移位:低位舍弃,高位补0 0或或1 1分两种情分两种情况:况:n有符号数:正数补有符号数:正数补0 0,负数补,负数补1 1n无符号数:补无符号数:补0 0赋值表达式n赋值操作符为右结合赋值操作符为右结合n分为简单赋值和复合赋值两种:分为简单赋值和复合赋值两种:n=n+=-=*=/=%=&=|=+=-=*=/=%=&=|=关系表达式n比较运算比较运算n=!=!=n =n类型判断类型判断nisis操作符操作符比较运算(=和!=)()n对于值类型,两个操作数相等相当于这两对于值类型,两个操作数相等相当于这两个数所包含的值相等个数所包含的值相等n对于引用类型,两个操作数相等有两种情对于引用类型,两个操作数相等有两种情况:况:n它们均为它们均为nullnulln它们指向同一个对象它们指向同一个对象类型判断(is)()nisis操作符:用来在转换执行之前进行类型操作符:用来在转换执行之前进行类型判断判断ne is Te is T,e e为一个变量或表达式,为一个变量或表达式,T T为一个为一个类型,类型,e is Te is T返回返回truetrue或或falsefalsen对于值类型进行类型判断无实际意义对于值类型进行类型判断无实际意义n对于引用类型:对于引用类型:ne e的值为的值为nullnull,e is Te is T始终返回始终返回falsefalsene e不为不为nullnull,e e的类型为的类型为T T或者存在从或者存在从e e的类型到的类型到T T的隐式转换,表达式返回的隐式转换,表达式返回truetrue,否则返回,否则返回falsefalsenDemo:P86,P4_10Demo:P86,P4_10条件逻辑表达式n逻辑与逻辑与&、逻辑或、逻辑或|、逻辑非、逻辑非!n有时不需要计算整个表达式即可确定结果,有时不需要计算整个表达式即可确定结果,称为称为“短路短路”n 类型表达式(as和typeof)nasas操作符操作符nasas操作符进行类型转换操作符进行类型转换nisis操作符进行类型判断操作符进行类型判断ntypeoftypeof操作符操作符ntypeoftypeof操作符通过类型名获得类型原型操作符通过类型名获得类型原型as操作符()e as Te as T,e e为一个变量或表达式,且必须为为一个变量或表达式,且必须为引用类型,引用类型,T T为一个类型(类为一个类型(类System.TypeSystem.Type的的一个实例)一个实例)如果如果e e的类型和的类型和T T兼容,兼容,asas操作符将操作符将e e转换为转换为T T类型并返回转换后的类型并返回转换后的e e,如果转换失败返回,如果转换失败返回nullnulle as Te as T e is T?(T)e :e is T?(T)e :(T)null(T)nullDemo:P90,P4_12Demo:P90,P4_12typeof操作符GetTypeGetType方法通过类型的实例获取类型原型方法通过类型的实例获取类型原型通过类型本身得到类型原型,可以使用一元通过类型本身得到类型原型,可以使用一元操作符操作符typeoftypeof一些例子:一些例子:typeof(int)typeof(int)typeof(string)typeof(string)typeof(Contact)
展开阅读全文