《深入理解C#语言》PPT课件.ppt

上传人:tia****nde 文档编号:11510032 上传时间:2020-04-26 格式:PPT 页数:44 大小:342KB
返回 下载 相关 举报
《深入理解C#语言》PPT课件.ppt_第1页
第1页 / 共44页
《深入理解C#语言》PPT课件.ppt_第2页
第2页 / 共44页
《深入理解C#语言》PPT课件.ppt_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第14章深入理解C#语言,内容提要,类型与转换变量及其传递多态与虚方法调用动态类型确定对象构造与析构csharp语言新特性,1类型与转换,数据类型,C#的数据类型分值类型(ValueType)和引用类型(ReferenceType)两大类值类型包括简单类型(SimpleType)结构类型(StructType)枚举类型(EnumType)引用类型包括类类型(ClassType)数组类型(ArrayType)指代类型(Delegate),ReferenceandValueTypes,inti=123;,intj=i;,stringt=s;,strings=Helloworld;,示例,Class显式转换inti=(int)3.14;整型提升sbytea=1,b=2;a+b为int型枚举类型与数字类型之间可以显式转换结构类型之间不能转换,引用类型转换,显式或隐式转换(都要求有继承关系)Personp=newStudent();/隐式转换Students=(Student)p;/显式转换可能转成功,也可能异常IRunnabler=p;/隐式转换as运算符Students=pasStudent;可能成功,也可能为null,AsObject.cs,引用类型与值类型的转换,inti=123;objecto=i;intj=(int)o;,Boxingandunboxing,Unboxing必须显式转换,BoxingTest.cs,inttotal=35;strings=String.Format(Yourtotalwas0on1,total,date);Hashtablet=newHashtable();t.Add(0,zero);t.Add(1,one);DateTimed=DateTime.Now;Strings=d.ToString();/noboxinta=newint2;a0=33;/noboxArrayLista=newArrayList();a.Add(33);/boxhere,2变量及其传递,域变量及局部变量,类static变量相当于类中的“全局变量”域变量相当于对象中的变量局部变量在函数体及其中,在栈中分配,自动消失域变量自动有初值,局部变量则不,LocalVarAndMemberVar.cs,按值传送的参数,按值传送要注意值类型与引用类型TransByValue.csTransByValueStructClass.cs,ref参数及out参数,ref参数在传之间必先赋值out参数在函数中必须赋值后才能返回表达式及对象的属性不能作ref及out参数TransByRef.csRefSwap.csTransByOut.csRefColorRGB.cs,param参数,数组参数(相当于VB的可变参数)参数必须放在最后调用时,可用数组,也可用多个参数定义:doubleMulti(paramsdoublenums)调用Multi();Multi(27);Multi(3.14,0.9,0.9);Multi(1,2,3,4,5);Multi(newdouble1,2,3,4,5);,ParamsTest.cs,3多态与虚方法调用,多态(Polymorphism),在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。在C#中,多态性的定义是,同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性。,4-2,两种类型的多态性,编译时的多态性编译时的多态是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性运行时的多态性是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员实现。编译时的多态性提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。,上溯造型与虚方法调用,VirtualInvokeShape.cs,staticvoiddoStuff(Shapes)s.draw();Shapec=newCircle();Shaper=newRectangle();Shapes=newSquare();doStuff(c);doStuff(r);doStuff(s);,虚方法的语法规范,必须有virtual或abstract或override所修饰。虚方法不能省略访问控制符,不能是private的,不能是static的,因为它们应该可以被子类所覆盖。子类中要覆盖父类的虚方法,必须用override。否则认为是新(new)的一个方法,并隐藏了父类的方法,不会实行虚方法调用。覆盖和被覆盖的方法必须有相同的可访问性和相同的返回类型。,虚方法与非虚方法的区别,虚方法调用的方法是由对象实例的类型所决定非虚方法调用的方法是由所声明的对象变量来决定的。,VirtualAndNoneVirtual.cs,最可派生的方法,当多次派生,并有virtual与非virtual方法时,VirtualComplex.cs,4动态类型确定,is运算符,用于判断运行时对象的类型格式:对象is类型不是null可转换,而不异常,IsTest.cs,=与!=,值类型相等引用类型的相等是判断是否是同一对象除非重载了=及!=操作对于string等类型,已经进行了重载对于两个boxing的对象,=总是false,得到类型信息,typeof运算符typeof(System.Console)对象.GetType()Type.GetType(string类名),TypeGetType.cs,TypeGetMembers.cs,反射,反射Reflection,ReflectionTest.cs,5对象构造与析构,构造方法,构造方法的初始化部分,使用this及base调用本类或父类的构造方法不用this且不用base,则会自动认为base(),classAA(inta)classB:AB(Strings)/编译不能通过,ConstructCallThisAndBase.cs,域的初始化,域的初始化中不能引用this在base被调用之前不能引用this,classB:Aintx=1;intM()return1;inty=x+M();/ErrorB():base(x)/Error,构造方法的执行过程,执行过程若有this(),转向之执行域的初始化转到base执行方法体应避免在构造方法中调用任何虚方法,ConstructorExecution.cs,静态构造方法,静态构造方法总是在该类的所有静态域初始化之后执行;静态构造方法总是在该类被使用(如访问静态域、生成实例)之前完成;静态构造方法最多被执行一次。静态构造方法的执行顺序的不确定性,所以在使用构造方法时应谨慎应尽量避免在静态初始化或静态域中出现循环引用的情况。staticinta=b+1;staticintb=a+1;,析构方法,析构方法类名()析构方法会自动调用父类的构造方法注:编译器生成的构造方法名字为ctor()生成的析构方法名字为Finalize()不能显式地调用析构方法,自动垃圾回收,垃圾回收(garbagecollection)自动回收“强制”回收System.GC();,Stringa,b;a=String.Copy(helloworld);b=String.Copy(gameover);Console.WriteLine(a+b+ok);a=null;a=b;returna;,显式资源管理,实现IDisposable接口其中有方法:voidDispose();,使用using语句,Rr1=newR();tryr1.F();finallyif(r1!=null)(IDisposable)r1).Dispose();,using(Rr1=newR()r1.F();,小结,类型与转换asboxing变量及其传递按值outrefparams多态与虚方法调用abstract,virtualoverride动态类型确定typeofis=!=反射对象构造与析构构造顺序IDisposableusing,6.csharp语言新特性,C#2.0引入泛型C#3.0引入Lambda及LinqC#4.0更多的动态特性dynmaic,泛型(Generic),Listbooks=newList();Bookbook=books0;/以前要用强制类型转换ArrayListbooks=newArrayList();Bookbook=(Book)books0;,常用的泛型的delegate,Func多个参数FuncAction多个参数ActionPredicateComparisonConverterEventHandler,匿名方法,delegate(参数)方法体可以当一个匿名方法newThread(newThreadStart(delegate().);可以被隐式转换为一个兼容的委托类型newThread(delegate().);,Linq,常见的形式fromcincustomerswherec.Age10orderbyc.Nameselectnewc.Name,c.Phone相当于customers.Where(c=c.Age10).OrderBy(c=c.Name).Select(c=newc.Name,c.Phone),C#的未来,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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