类型的使用优秀课件.ppt

上传人:石*** 文档编号:64399278 上传时间:2022-11-29 格式:PPT 页数:30 大小:1.28MB
返回 下载 相关 举报
类型的使用优秀课件.ppt_第1页
第1页 / 共30页
类型的使用优秀课件.ppt_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《类型的使用优秀课件.ppt》由会员分享,可在线阅读,更多相关《类型的使用优秀课件.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、类型的使用类型的使用第1页,本讲稿共30页第第6章章 类型的使用类型的使用 nSystem.Object 类的功能类的功能n特殊构造函数特殊构造函数n类型操作类型操作n接口接口n管理外部类型管理外部类型第2页,本讲稿共30页System.Object类的功能类的功能n哈希代码哈希代码n对象标识对象标识n对象比较对象比较 n描述类实例的文本字符串描述类实例的文本字符串 6.1 System.Object 类的功能第3页,本讲稿共30页哈希代码哈希代码 n哈希代码被用来支持快速查询哈希代码被用来支持快速查询n重写重写 System.Object的的GetHashCode方法时方法时l必须为有相同值

2、的对象返回相同的哈希代码l必须用高效率的方法来实现6.1.1 哈希代码 struct Student string name;int ID;/每个实例是惟一的 public override int GetHashCode()return ID;第4页,本讲稿共30页 哈希代码哈希代码(续)(续)n在选择生成哈希代码算法时遵循的一些指导性原在选择生成哈希代码算法时遵循的一些指导性原则则l使用高效的随机分配算法l算法中可以调用基类的 GetHashCode 方法,但不要调用Object 和 ValueType 类的 GetHashCode 方法l算法中至少要用到一个成员字段l理想情况下,算法中用

3、到的字段是不可变的l让算法尽可能的快l有相同值的对象要返回相同的哈希代码6.1.1 哈希代码 第5页,本讲稿共30页对象标识对象标识n每个对象都有一个独一无二的标识每个对象都有一个独一无二的标识n和和VC+中用内存地址来决定对象的标识类似中用内存地址来决定对象的标识类似n用用Object.ReferenceEquals方法来测试两个引用是否方法来测试两个引用是否指向同一个对象,就是说,是否有相同的标识指向同一个对象,就是说,是否有相同的标识6.1.2 对象标识第6页,本讲稿共30页对象比较对象比较 n比较两个对象来确定他们是否相等比较两个对象来确定他们是否相等n重写重写Equals方法方法n提

4、供提供=和和!=运算符运算符n指导原则指导原则l如果要重写Equals方法,则必须重写 GetHashCode 方法l如果要重载=,用相同的算法重写 Equals方法 l如果要实现 Icomparable 接口,则必须要实现Equals方法l保证 Equals 和 GetHashCode 方法不抛出异常6.1.3 对象比较第7页,本讲稿共30页描述类实例的文本字符串描述类实例的文本字符串n重写重写ToString方法来自定义对象的可读字符串内容方法来自定义对象的可读字符串内容n用用IFormattabl 接口和接口和format方法来实现本地化字符方法来实现本地化字符串串6.1.4 描述类实例

5、的文本字符串struct President public string FirstName;public string LastName;public override string ToString()return FirstName+LastName;第8页,本讲稿共30页第第6章章 类型的使用类型的使用 nSystem.Object 类的功能类的功能n特殊构造函数特殊构造函数n类型操作类型操作n接口接口n管理管理外部类型外部类型第9页,本讲稿共30页特殊构造函数特殊构造函数n静态构造函数静态构造函数n私有构造函数私有构造函数6.2 特殊构造函数第10页,本讲稿共30页静态构造函数静态构

6、造函数n被用来初始化静态成员被用来初始化静态成员n在中间语言中名字为在中间语言中名字为.cctor6.2.1 静态构造函数class DeviceConnection public static uint ConnectionCount;public void OpenConnection(string connectionName)ConnectionCount+;/其他打开设备工作 static DeviceConnection()/初始化静态成员变量ConnectionCount=0;第11页,本讲稿共30页静态构造函数(续)静态构造函数(续)n静态构造函数没有类似静态构造函数没有类似“

7、private”或者或者“public”的修饰符的修饰符n它只能用来初始化静态变量,而不能用来初始化它只能用来初始化静态变量,而不能用来初始化实例变量实例变量n当内联地初始化静态成员变量时当内联地初始化静态成员变量时l当类没有提供显式的静态构造函数时,静态构造函数被隐式创建,并在其内初始化静态变量l当类显式提供了静态构造函数时,则内联地初始化被编译到显示构造函数中去,并且首先被执行6.2.1 静态构造函数第12页,本讲稿共30页私有构造函数私有构造函数n用来防止类被实例化用来防止类被实例化n用来实现所有成员都是静态的类用来实现所有成员都是静态的类n用用protected构造函数来使所有成员都是

8、静态构造函数来使所有成员都是静态的类可以被继承的类可以被继承6.2.2 私有构造函数class Trig public static double Sin(double x)/计算和返回 sin(x)public static double Cos(double x)/计算和返回 cos(x)public static double Tan(double x)/计算和返回 tan(x)private Trig()第13页,本讲稿共30页第第6章章 类型的使用类型的使用 nSystem.Object 类的功能类的功能n特殊构造函数特殊构造函数n类型操作类型操作n接口接口n管理管理外部类型外部类型

9、第14页,本讲稿共30页类型操作类型操作n类型转换类型转换n强制转换强制转换n装箱装箱6.3 类型操作第15页,本讲稿共30页类型转换类型转换n当一种类型的值被赋给另一种类型的变量时发生类当一种类型的值被赋给另一种类型的变量时发生类型转换型转换n显式类型转换显式类型转换n显式类型转换不会发生编译时错误,但有可能发生显式类型转换不会发生编译时错误,但有可能发生运行时异常运行时异常n收缩类型转换必须是显式的收缩类型转换必须是显式的6.3.1 类型转换int x=5;double y=(double)x;第16页,本讲稿共30页类型转换(续)类型转换(续)n隐式类型转换隐式类型转换n转换操作符转换操

10、作符6.3.1 类型转换 int x=5;double y=x;public static implicit operator byte(Digit d)public static explicit operator Digit(byte b)第17页,本讲稿共30页强制转换强制转换n从派生类到基类的转换从派生类到基类的转换n从基类到派生类的转换从基类到派生类的转换6.3.2 强制转换Square sq=new Square();Shape sh=sq;Square sq2=(Square)sh;/向下转换到 Square类型sh=new Shape();sq2=(Square)sh;/无效类

11、型转换异常第18页,本讲稿共30页强制转换(续)强制转换(续)n用用Is和和TypeOf操作符进行对象类型检查操作符进行对象类型检查n转换接口转换接口6.3.2 强制转换Shape sh=new Shape();Square sq;if(sh is Square)sq=(Square)sh;ICDPlayer player;Device d=new Device();player=(ICDPlayer)d;/转换到接口player.Play();第19页,本讲稿共30页装箱装箱n把值类型转换成引用类型时发生装箱把值类型转换成引用类型时发生装箱lSystem.Object的实例被分配在堆上l值类

12、型被拷贝到新的对象n取消装箱发生在从取消装箱发生在从Object对象中把值类型重新取回来对象中把值类型重新取回来时时n在循环中发生装箱和取消装箱操作的代价是很高的在循环中发生装箱和取消装箱操作的代价是很高的6.3.3 装箱int x=5;/值类型Object o=x;/被装箱Console.WriteLine(“The answer is:0”,x);/被装箱int y=(int)o;/取消装箱第20页,本讲稿共30页第第6章章 类型的使用类型的使用 nSystem.Object类的功能类的功能n特殊构造函数特殊构造函数n类型操作类型操作n接口接口n管理管理外部类型外部类型第21页,本讲稿共3

13、0页接口接口n继承需考虑的事项继承需考虑的事项 n显式接口的实现显式接口的实现6.4 接口第22页,本讲稿共30页继承需考虑的事项继承需考虑的事项 n继承多个接口继承多个接口n从多个接口继承生成新的接口从多个接口继承生成新的接口n实现接口的基类实现接口的基类l当一个派生类的实例被转化为接口时,则该接口的方法调用发生在实现该接口的类上6.4.1 继承需考虑的事项interface IFoo void DoSomething1();interface IBar void DoSomething2();class MyObject:IFoo,IBar.interface INewInterface:

14、IFoo,IBar void DoSomething3();第23页,本讲稿共30页显式接口的实现显式接口的实现n类和接口的可访问性对比类和接口的可访问性对比n用显示接口实现用显示接口实现l当接口和实现类的成员实现名称会被混淆时l当继承自有重名的多个接口时6.4.2 显式接口的实现interface IFoo void DoSomething();interface IBar void DoSomething();class MyObject:IFoo,IBar void IFoo.DoSomething()Console.WriteLine(IFoo DoSomething called);

15、void IBar.DoSomething()Console.WriteLine(IBar DoSomething called);第24页,本讲稿共30页第第6章章 类型类型nSystem.Object 类的功能类的功能n特殊构造函数特殊构造函数n类型操作类型操作n接口接口n管理管理外部类型外部类型第25页,本讲稿共30页管理外部类型管理外部类型n平台调用服务平台调用服务nCOM互操作性互操作性 6.5 管理外部类型 第26页,本讲稿共30页平台调用服务平台调用服务n也叫做也叫做PInvoken用用DllImport属性从外部属性从外部DLL中导入中导入API函数函数6.5.1 平台调用服务

16、 DllImport(user32.dll,CharSet=CharSet.Ansi)public static extern int MessageBox(int h,string m,string c,int type);public static void Main()string pText=Hello World!;string pCaption=PInvoke Test;MessageBox(0,pText,pCaption,0);第27页,本讲稿共30页COM互操作性互操作性 n使使.NET Framework类库对类库对COM可用可用l必须创建COM可调用包(CCW)l用Tlb

17、exp.exe创建CCWsl用Regasm.exe来注册组件n使使COM类库对类库对.NET Framework可用可用l必须创建运行时可调用包(RCW)l用Tlbimp.exe创建RCWs6.5.2 COM互操作性第28页,本讲稿共30页实验实验 类型的使用类型的使用练习练习1 重写重写System.Object方法方法练习练习2 实现显式接口实现显式接口 第29页,本讲稿共30页回顾回顾学习完本章后,将能够:学习完本章后,将能够:n解释解释System.Object类提供的功能类提供的功能n创建和使用接口来定义方法和属性创建和使用接口来定义方法和属性n解释装箱和取消装箱操作解释装箱和取消装箱操作n使用运算符运行时发现类型,并进行转换使用运算符运行时发现类型,并进行转换n解释解释.NET Framework提供了哪些服务来和非托管代提供了哪些服务来和非托管代码互操作码互操作第30页,本讲稿共30页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁