第14章深入理解C语言

上传人:仙*** 文档编号:186043235 上传时间:2023-02-07 格式:PPT 页数:44 大小:371.53KB
收藏 版权申诉 举报 下载
第14章深入理解C语言_第1页
第1页 / 共44页
第14章深入理解C语言_第2页
第2页 / 共44页
第14章深入理解C语言_第3页
第3页 / 共44页
资源描述:

《第14章深入理解C语言》由会员分享,可在线阅读,更多相关《第14章深入理解C语言(44页珍藏版)》请在装配图网上搜索。

1、 第14章 深入理解C#语言唐大仕http:/内容提要n类型与转换n变量及其传递n多态与虚方法调用n动态类型确定n对象构造与析构ncsharp语言新特性1 类型与转换数据类型nC#的数据类型分值类型(Value Type)和引用类型(Reference Type)两大类n值类型包括n简单类型(Simple Type)n结构类型(Struct Type)n枚举类型(Enum Type)n引用类型包括n类类型(Class Type)n数组类型(Array Type)n指代类型(Delegate)Reference and Value TypesReference引用型(Class)Value 值(

2、Struct)分配Heap 堆Inline 栈默认值NullZeroed=的含义复制引用复制值变量中的内容引用实际值示例 year day p month q m n 栈内存 堆内存 Class&Struct.cs值类型的转换n数字类型之间可以互相转化n隐式转换 float f=3;n显式转换 int i=(int)3.14;n整型提升 sbyte a=1,b=2;a+b为int型n枚举类型与数字类型之间可以显式转换n结构类型之间不能转换 引用类型转换 n显式或隐式转换(都要求有继承关系)nPerson p=new Student();/隐式转换nStudent s=(Student)p;/显

3、式转换n可能转成功,也可能异常nIRunnable r=p;/隐式转换nas 运算符nStudent s=p as Student;n可能成功,也可能为nullAsObject.cs引用类型与值类型的转换iojBoxing and unboxingUnboxing必须显式转换BoxingTest.cs2 变量及其传递域变量及局部变量n类static变量n相当于类中的“全局变量”n域变量n相当于对象中的变量n局部变量n在函数体及其中,在栈中分配,自动消失n域变量自动有初值,局部变量则不LocalVarAndMemberVar.cs按值传送的参数n按值传送n要注意值类型与引用类型nTransByV

4、alue.cs TransByValueStructClass.cs ref参数及out参数 nref参数在传之间必先赋值nout参数在函数中必须赋值后才能返回n表达式及对象的属性不能作ref及out参数nTransByRef.csnRefSwap.csnTransByOut.csnRefColorRGB.csparam参数n数组参数(相当于VB的可变参数)n参数必须放在最后n调用时,可用数组,也可用多个参数n定义:ndouble Multi(params double nums)n调用nMulti();nMulti(27);nMulti(3.14,0.9,0.9);nMulti(1,2,3,

5、4,5);nMulti(new double 1,2,3,4,5 );ParamsTest.cs3 多态与虚方法调用 多态(Polymorphism)n在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。n在C#中,多态性的定义是,同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性。4-2两种类型的多态性 n编译时的多态性n编译时的多态是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。n运行时的

6、多态性n运行时的多态性是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。n编译时的多态性提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。上溯造型与虚方法调用VirtualInvokeShape.csstatic void doStuff(Shape s)s.draw();Shape c=new Circle();Shape r=new Rectangle();Shape s=new Square();doStuff(c);doStuff(r);doStuff(s);虚方法的语法规范n必须有virtualvirtual或abstrac

7、tabstract或overrideoverride所修饰。n虚方法不能省略访问控制符,不能是private的,不能是static的,因为它们应该可以被子类所覆盖。n子类中要覆盖父类的虚方法,必须用overrideoverride。否则认为是新(new)的一个方法,并隐藏了父类的方法,不会实行虚方法调用。n覆盖和被覆盖的方法必须有相同的可访问性和相同的返回类型。虚方法与非虚方法的区别n虚方法调用的方法是由对象实例的类型所决定n非虚方法调用的方法是由所声明的对象变量来决定的。VirtualAndNoneVirtual.cs最可派生的方法n当多次派生,并有virtual与非virtual方法时Vi

8、rtualComplex.cs4 动态类型确定is运算符n用于判断运行时对象的类型n格式:对象 is 类型n不是nulln可转换,而不异常IsTest.cs=与!=n值类型相等n引用类型的相等n是判断是否是同一对象n除非重载了=及!=操作n对于string等类型,已经进行了重载n对于两个boxing的对象,=总是false得到类型信息ntypeof运算符ntypeof(System.Console)n对象.GetType()nType.GetType(string 类名)TypeGetType.csTypeGetMembers.cs反射n反射ReflectionReflectionTest.c

9、s5 对象构造与析构构造方法n构造方法的初始化部分,使用this及basen调用本类或父类的构造方法n不用this且不用base,则会自动认为base()class AA(int a)class B:AB(String s)/编译不能通过ConstructCallThisAndBase.cs域的初始化n域的初始化中不能引用thisn在base被调用之前不能引用 this class B:Aint x=1;int M()return 1;int y=x+M();/ErrorB():base(x)/Error构造方法的执行过程 n执行过程n若有this(),转向之n执行域的初始化n转到basen执

10、行方法体n应避免在构造方法中调用任何虚方法 ConstructorExecution.cs静态构造方法n静态构造方法总是在该类的所有静态域初始化之后执行;n静态构造方法总是在该类被使用(如访问静态域、生成实例)之前完成;n静态构造方法最多被执行一次。n静态构造方法的执行顺序的不确定性,所以在使用构造方法时应谨慎 n应尽量避免在静态初始化或静态域中出现循环引用的情况。nstatic int a=b+1;static int b=a+1;析构方法 n析构方法n类名()n析构方法会自动调用父类的构造方法n注:n编译器生成的构造方法名字为ctor()n生成的析构方法名字为Finalize()n不能显式

11、地调用析构方法自动垃圾回收 n垃圾回收(garbage collection)n自动回收n“强制”回收 System.GC();String a,b;a=String.Copy(hello world);b=String.Copy(game over);Console.WriteLine(a+b+ok);a=null;a=b;return a;显式资源管理n实现IDisposable接口n其中有方法:nvoid Dispose();使用using语句R r1=new R();try r1.F();finally if(r1!=null)(IDisposable)r1).Dispose();us

12、ing(R r1=new R()r1.F();小结n类型与转换nas boxingn变量及其传递n按值 out ref paramsn多态与虚方法调用nabstract,virtual overriden动态类型确定ntypeof is =!=反射n对象构造与析构n构造顺序 IDisposable using 6.csharp语言新特性nC#2.0 引入泛型nC#3.0 引入Lambda及LinqnC#4.0 更多的动态特性dynmaic泛型(Generic)nList books=new List();nBook book=books0;n/以前要用强制类型转换nArrayList book

13、s=new ArrayList();nBook book=(Book)books0;常用的泛型的delegatenFuncn多个参数FuncnActionn多个参数ActionnPredicatenComparisonnConverternEventHandler匿名方法ndelegate(参数)方法体n可以当一个匿名方法nnew Thread(nnew ThreadStart(delegate().);n可以被隐式转换为一个兼容的委托类型nnew Thread(delegate().);Linqn常见的形式nfrom c in customers nwhere c.Age10norderby c.Namenselect new c.Name,c.Phonen相当于ncustomersn.Where(c=c.Age10)n.OrderBy(c=c.Name).n.Select(c=new c.Name,c.Phone)C#的未来nhttp:/

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!