第14章深入理解C语言_第1页
第14章深入理解C语言_第2页
第14章深入理解C语言_第3页
第14章深入理解C语言_第4页
第14章深入理解C语言_第5页
已阅读5页,还剩38页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、gate) Reference and Value Types Reference引用型 (Class) Value 值 (Struct) 分配Heap 堆Inline 栈 默认值NullZeroed = 的含义复制引用复制值 变量中的内容引用实际值 第14章深入理解C语言 示例 year day p month q m n 栈内存 堆内存 Class n显式转换 int i = (int)3.14; n整型提升 sbyte a=1,b=2; a+b为int型 n枚举类型与数字类型之间可以显式转换 n结构类型之间不能转换 第14章深入理解C语言 引用类型转换 n显式或隐式转换(都要求有继承关系

3、) nPerson p = new Student(); /隐式转换 nStudent s = (Student) p; / 显式转换 n可能转成功,也可能异常 nIRunnable r = p; /隐式转换 nas 运算符 nStudent s = p as Student; n可能成功,也可能为null AsObject.cs 第14章深入理解C语言 引用类型与值类型的转换 i o j 第14章深入理解C语言 Boxing and unboxing Unboxing必须 显式转换 BoxingTest.cs 第14章深入理解C语言 2 变量及其传递 第14章深入理解C语言 域变量及局部变量

4、 n类static变量 n相当于类中的“全局变量” n域变量 n相当于对象中的变量 n局部变量 n在函数体及其中,在栈中分配,自动消失 n域变量自动有初值,局部变量则不 LocalVarAndMemberVar.cs 第14章深入理解C语言 按值传送的参数 n按值传送 n要注意值类型与引用类型 nTransByValue.cs TransByValueStructClass.cs 第14章深入理解C语言 ref参数及out参数 nref参数在传之间必先赋值 nout参数在函数中必须赋值后才能返回 n表达式及对象的属性不能作ref及out参数 nTransByRef.cs nRefS nTran

5、sByOut.cs nRefColorRGB.cs 第14章深入理解C语言 param参数 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,4,5); nMulti( new double 1,2,3,4,5 ); ParamsTest.cs 第14章深入理解C语言 3 多态与虚方法调用 第14章深入理解C语言 多态(Polymorph

6、ism) n在面向对象的系统中,多态性是一个非常重要 的概念,它允许客户对一个对象进行操作,由 对象来完成一系列的动作,具体实现哪个动作、 如何实现由系统负责解释。 n在C#中,多态性的定义是,同一操作作用于不 同的类的实例,不同的类将进行不同的解释, 最后产生不同的执行结果。C#支持两种类型的 多态性。 4-2 第14章深入理解C语言 两种类型的多态性 n编译时的多态性 n编译时的多态是通过重载来实现的。对于非虚的成 员来说,系统在编译时,根据传递的参数、返回的 类型等信息决定实现何种操作。 n运行时的多态性 n运行时的多态性是指直到系统运行时,才根据实际 情况决定实现何种操作。C#中,运行

7、时的多态性通 过虚成员实现。 n编译时的多态性提供了运行速度快的特点,而 运行时的多态性则带来了高度灵活和抽象的特 点。 第14章深入理解C语言 上溯造型与虚方法调用 VirtualInvokeShape.cs static void doStuff( Shape s ) s.draw(); Shape c = new Circle(); Shape r = new Rectangle(); Shape s = new Square(); doStuff(c); doStuff(r); doStuff(s); 第14章深入理解C语言 虚方法的语法规范 n必须有virtualvirtual或ab

8、stractabstract或overrideoverride所修饰。 n虚方法不能省略访问控制符,不能是private的, 不能是static的,因为它们应该可以被子类所 覆盖。 n子类中要覆盖父类的虚方法,必须用overrideoverride。 否则认为是新(new)的一个方法,并隐藏了父 类的方法,不会实行虚方法调用。 n覆盖和被覆盖的方法必须有相同的可访问性和 相同的返回类型。 第14章深入理解C语言 虚方法与非虚方法的区别 n虚方法调用的方法是由对象实例的类型 所决定 n非虚方法调用的方法是由所声明的对象 变量来决定的。 VirtualAndNoneVirtual.cs 第14章深

9、入理解C语言 最可派生的方法 n当多次派生,并有virtual与非virtual方法 时 VirtualComplex.cs 第14章深入理解C语言 4 动态类型确定 第14章深入理解C语言 is运算符 n用于判断运行时对象的类型 n格式:对象 is 类型 n不是null n可转换,而不异常 IsTest.cs 第14章深入理解C语言 = 与 != n值类型相等 n引用类型的相等 n是判断是否是同一对象 n除非重载了=及!=操作 n对于string等类型,已经进行了重载 n对于两个boxing的对象,=总是false 第14章深入理解C语言 得到类型信息 ntypeof运算符 ntypeof(

10、System.Console) n对象.GetType() nType.GetType(string 类名) TypeGetType.csTypeGetMembers.cs 第14章深入理解C语言 反射 n反射Reflection ReflectionTest.cs 第14章深入理解C语言 5 对象构造与析构 第14章深入理解C语言 构造方法 n构造方法的初始化部分,使用this及base n调用本类或父类的构造方法 n不用this且不用base,则会自动认为base() class A A(int a) class B : A B(String s ) /编译不能通过 ConstructCa

11、llThisAndBase.cs 第14章深入理解C语言 域的初始化 n域的初始化中不能引用this n在base被调用之前不能引用 this class B : A int x = 1; int M() return 1; int y = x+M(); /Error B():base(x) /Error 第14章深入理解C语言 构造方法的执行过程 n执行过程 n若有this(),转向之 n执行域的初始化 n转到base n执行方法体 n应避免在构造方法中调用任何虚方法 ConstructorExecution.cs 第14章深入理解C语言 静态构造方法 n静态构造方法总是在该类的所有静态域初

12、始化 之后执行; n静态构造方法总是在该类被使用(如访问静态 域、生成实例)之前完成; n静态构造方法最多被执行一次。 n静态构造方法的执行顺序的不确定性,所以在 使用构造方法时应谨慎 n应尽量避免在静态初始化或静态域中出现循环 引用的情况。 nstatic int a=b+1; static int b=a+1; 第14章深入理解C语言 析构方法 n析构方法 n类名() n析构方法会自动调用父类的构造方法 n注: n编译器生成的构造方法名字为ctor() n生成的析构方法名字为Finalize() n不能显式地调用析构方法 第14章深入理解C语言 自动垃圾回收 n垃圾回收(garbage c

13、ollection) 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; 第14章深入理解C语言 显式资源管理 n实现IDisposable接口 n其中有方法: nvoid Dispose(); 第14章深入理解C语言 使用using语句 R r1 = new R(); try r1.F(); finally if (r1 != null) (ID

14、isposable)r1).Dispose(); using ( R r1 = new R() ) r1.F(); 第14章深入理解C语言 小结 n类型与转换 nas boxing n变量及其传递 n按值 out ref params n多态与虚方法调用 nabstract, virtual override n动态类型确定 ntypeof is = != 反射 n对象构造与析构 n构造顺序 IDisposable using 第14章深入理解C语言 6. csharp语言新特性 nC#2.0 引入泛型 nC#3.0 引入Lambda及Linq nC#4.0 更多的动态特性dynmaic 第1

15、4章深入理解C语言 泛型(Generic) nList books=new List(); nBook book = books0; n/以前要用强制类型转换 nArrayList books = new ArrayList(); nBook book = (Book) books0; 第14章深入理解C语言 常用的泛型的delegate nFunc n多个参数Func nAction n多个参数Action nPredicate nComparison nConverter nEventHandler 第14章深入理解C语言 匿名方法 ndelegate(参数) 方法体 n可以当一个匿名方法 nnew Thread( nnew ThreadStart( delegate() . ) ); n可以被隐式

温馨提示

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

评论

0/150

提交评论