第14章深入理解C语言.ppt

上传人:sccc 文档编号:5891800 上传时间:2023-08-30 格式:PPT 页数:44 大小:342.04KB
返回 下载 相关 举报
第14章深入理解C语言.ppt_第1页
第1页 / 共44页
第14章深入理解C语言.ppt_第2页
第2页 / 共44页
第14章深入理解C语言.ppt_第3页
第3页 / 共44页
第14章深入理解C语言.ppt_第4页
第4页 / 共44页
第14章深入理解C语言.ppt_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第14章深入理解C语言.ppt》由会员分享,可在线阅读,更多相关《第14章深入理解C语言.ppt(44页珍藏版)》请在三一办公上搜索。

1、第14章 深入理解C#语言,内容提要,类型与转换变量及其传递多态与虚方法调用动态类型确定对象构造与析构csharp语言新特性,1 类型与转换,数据类型,C#的数据类型分值类型(Value Type)和引用类型(Reference Type)两大类值类型包括简单类型(Simple Type)结构类型(Struct Type)枚举类型(Enum Type)引用类型包括类类型(Class Type)数组类型(Array Type)指代类型(Delegate),Reference and Value Types,int i=123;,int j=i;,string t=s;,string s=Hell

2、o world;,示例,Class&Struct.cs,值类型的转换,数字类型之间可以互相转化隐式转换 float f=3;显式转换 int i=(int)3.14;整型提升 sbyte a=1,b=2;a+b为int型枚举类型与数字类型之间可以显式转换结构类型之间不能转换,引用类型转换,显式或隐式转换(都要求有继承关系)Person p=new Student();/隐式转换Student s=(Student)p;/显式转换可能转成功,也可能异常IRunnable r=p;/隐式转换as 运算符Student s=p as Student;可能成功,也可能为null,AsObject.cs

3、,引用类型与值类型的转换,int i=123;object o=i;int j=(int)o;,Boxing and unboxing,Unboxing必须显式转换,BoxingTest.cs,int total=35;string s=String.Format(Your total was 0 on 1,total,date);Hashtable t=new Hashtable();t.Add(0,zero);t.Add(1,one);DateTime d=DateTime.Now;String s=d.ToString();/no boxint a=new int2;a0=33;/no

4、boxArrayList a=new ArrayList();a.Add(33);/box here,2 变量及其传递,域变量及局部变量,类static变量相当于类中的“全局变量”域变量相当于对象中的变量局部变量在函数体及其中,在栈中分配,自动消失域变量自动有初值,局部变量则不,LocalVarAndMemberVar.cs,按值传送的参数,按值传送要注意值类型与引用类型TransByValue.cs TransByValueStructClass.cs,ref参数及out参数,ref参数在传之间必先赋值out参数在函数中必须赋值后才能返回表达式及对象的属性不能作ref及out参数TransB

5、yRef.csRefSwap.csTransByOut.csRefColorRGB.cs,param参数,数组参数(相当于VB的可变参数)参数必须放在最后调用时,可用数组,也可用多个参数定义:double Multi(params double nums)调用Multi();Multi(27);Multi(3.14,0.9,0.9);Multi(1,2,3,4,5);Multi(new double 1,2,3,4,5);,ParamsTest.cs,3 多态与虚方法调用,多态(Polymorphism),在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完

6、成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。在C#中,多态性的定义是,同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性。,4-2,两种类型的多态性,编译时的多态性编译时的多态是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性运行时的多态性是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。编译时的多态性提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。,上溯造型与虚方法调用,VirtualInvoke

7、Shape.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);,虚方法的语法规范,必须有virtual或abstract或override所修饰。虚方法不能省略访问控制符,不能是private的,不能是static的,因为它们应该可以被子类所覆盖。子类中要覆盖父类的虚方法,必须用override。否则认为是新(new)的一个方法,并隐藏了父类的方法,不会实行虚方法调用。

8、覆盖和被覆盖的方法必须有相同的可访问性和相同的返回类型。,虚方法与非虚方法的区别,虚方法调用的方法是由对象实例的类型所决定非虚方法调用的方法是由所声明的对象变量来决定的。,VirtualAndNoneVirtual.cs,最可派生的方法,当多次派生,并有virtual与非virtual方法时,VirtualComplex.cs,4 动态类型确定,is运算符,用于判断运行时对象的类型格式:对象 is 类型不是null可转换,而不异常,IsTest.cs,=与!=,值类型相等引用类型的相等是判断是否是同一对象除非重载了=及!=操作对于string等类型,已经进行了重载对于两个boxing的对象,=

9、总是false,得到类型信息,typeof运算符typeof(System.Console)对象.GetType()Type.GetType(string 类名),TypeGetType.cs,TypeGetMembers.cs,反射,反射Reflection,ReflectionTest.cs,5 对象构造与析构,构造方法,构造方法的初始化部分,使用this及base调用本类或父类的构造方法不用this且不用base,则会自动认为base(),class AA(int a)class B:AB(String s)/编译不能通过,ConstructCallThisAndBase.cs,域的初始

10、化,域的初始化中不能引用this在base被调用之前不能引用 this,class B:Aint x=1;int M()return 1;int y=x+M();/ErrorB():base(x)/Error,构造方法的执行过程,执行过程若有this(),转向之执行域的初始化转到base执行方法体应避免在构造方法中调用任何虚方法,ConstructorExecution.cs,静态构造方法,静态构造方法总是在该类的所有静态域初始化之后执行;静态构造方法总是在该类被使用(如访问静态域、生成实例)之前完成;静态构造方法最多被执行一次。静态构造方法的执行顺序的不确定性,所以在使用构造方法时应谨慎 应

11、尽量避免在静态初始化或静态域中出现循环引用的情况。static int a=b+1;static int b=a+1;,析构方法,析构方法类名()析构方法会自动调用父类的构造方法注:编译器生成的构造方法名字为ctor()生成的析构方法名字为Finalize()不能显式地调用析构方法,自动垃圾回收,垃圾回收(garbage collection)自动回收“强制”回收 System.GC();,String a,b;a=String.Copy(hello world);b=String.Copy(game over);Console.WriteLine(a+b+ok);a=null;a=b;ret

12、urn a;,显式资源管理,实现IDisposable接口其中有方法:void Dispose();,使用using语句,R r1=new R();try r1.F();finally if(r1!=null)(IDisposable)r1).Dispose();,using(R r1=new R()r1.F();,小结,类型与转换as boxing变量及其传递按值 out ref params多态与虚方法调用abstract,virtual override动态类型确定typeof is=!=反射对象构造与析构构造顺序 IDisposable using,6.csharp语言新特性,C#2.

13、0 引入泛型C#3.0 引入Lambda及LinqC#4.0 更多的动态特性dynmaic,泛型(Generic),List books=new List();Book book=books0;/以前要用强制类型转换ArrayList books=new ArrayList();Book book=(Book)books0;,常用的泛型的delegate,Func多个参数FuncAction多个参数ActionPredicateComparisonConverterEventHandler,匿名方法,delegate(参数)方法体可以当一个匿名方法new Thread(new ThreadStart(delegate().);可以被隐式转换为一个兼容的委托类型new Thread(delegate().);,Linq,常见的形式from c in customers where c.Age10orderby c.Nameselect new c.Name,c.Phone相当于customers.Where(c=c.Age10).OrderBy(c=c.Name).Select(c=new c.Name,c.Phone),C#的未来,http:/,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号