欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

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

    • 资源ID:3420977       资源大小:342.04KB        全文页数:44页
    • 资源格式: PPT        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第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 = “Hello 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,引用类型与值类型的转换,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 box int a = new int2; a0 = 33; / no box ArrayList a = new ArrayList(); a.Add(33); / box here,2 变量及其传递,域变量及局部变量,类static变量 相当于类中的“全局变量” 域变量 相当于对象中的变量 局部变量 在函数体及其中,在栈中分配,自动消失 域变量自动有初值,局部变量则不,LocalVarAndMemberVar.cs,按值传送的参数,按值传送 要注意值类型与引用类型 TransByValue.cs TransByValueStructClass.cs,ref参数及out参数,ref参数在传之间必先赋值 out参数在函数中必须赋值后才能返回 表达式及对象的属性不能作ref及out参数 TransByRef.cs RefSwap.cs TransByOut.cs RefColorRGB.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),在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。 在C#中,多态性的定义是,同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种类型的多态性。,4-2,两种类型的多态性,编译时的多态性 编译时的多态是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。 运行时的多态性 运行时的多态性是指直到系统运行时,才根据实际情况决定实现何种操作。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);,虚方法的语法规范,必须有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(),class A A(int a) class B : A B(String s ) /编译不能通过 ,ConstructCallThisAndBase.cs,域的初始化,域的初始化中不能引用this 在base被调用之前不能引用 this,class B : A int x = 1; int M() return 1; int y = x+M(); /Error B():base(x) /Error ,构造方法的执行过程,执行过程 若有this(),转向之 执行域的初始化 转到base 执行方法体 应避免在构造方法中调用任何虚方法,ConstructorExecution.cs,静态构造方法,静态构造方法总是在该类的所有静态域初始化之后执行; 静态构造方法总是在该类被使用(如访问静态域、生成实例)之前完成; 静态构造方法最多被执行一次。 静态构造方法的执行顺序的不确定性,所以在使用构造方法时应谨慎 应尽量避免在静态初始化或静态域中出现循环引用的情况。 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; return 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.0 引入泛型 C#3.0 引入Lambda及Linq C#4.0 更多的动态特性dynmaic,泛型(Generic),List books=new List(); Book book = books0; /以前要用强制类型转换 ArrayList books = new ArrayList(); Book book = (Book) books0;,常用的泛型的delegate,Func 多个参数Func Action 多个参数Action Predicate Comparison Converter EventHandler,匿名方法,delegate(参数) 方法体 可以当一个匿名方法 new Thread( new ThreadStart( delegate() . ) ); 可以被隐式转换为一个兼容的委托类型 new Thread(delegate() . );,Linq,常见的形式 from c in customers where c.Age10 orderby c.Name select new c.Name, c.Phone 相当于 customers .Where(c= c.Age10) .OrderBy(c = c.Name). .Select(c = new c.Name, c.Phone ),C#的未来,http:/code.msdn.microsoft.com/csharpfuture,

    注意事项

    本文(第14章深入理解C#语言.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开