C#课件第十三次课.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
接口的实现 在上面的代码当中我们的接口定义了2个方法,删除文件和显示文件。 1. DelFile(); 2. DisFile(); 这里接口并不能实现这个接口里所定义的方法,那怎么做呢? 通过继承来实现,且显示实现接口成员只能通过接口实例访问。 接口支持多继承的例子 interface IControl { void Paint(); } interface ITextBox: IControl { void SetText(string text); } interface IListBox: IControl { void SetItems(string[] items); } interface IComboBox: ITextBox, IListBox { } 接口ITextBox 和IListBox 都从接口IControl 中继承,也就继承了接口IControl 的Paint 方法, 接口IComboBox 从接口ITextBox 和IListBox 中继承,因此它应该继承了接口ITextBox 的SetText 方法和IListBox 的SetItems 方法,还有IControl 的Paint 方法。 装箱和拆箱 装箱和拆箱使值类型能够被视为对象。对值类型装箱将把该值类型打包到 Object 引用类型的一个实例中。这使得值类型可以存储于垃圾回收堆中。拆箱将从对象中提取值类型。 装箱(boxing)和拆箱(unboxing)是C#类型系统中的重要的概念。它允许将任何类型的数据转换为对象,同时也允许任何类型的对象转换到与之兼容的数据类型。 注意:装箱转换和拆箱转换过程中必须遵循类型兼容的原则,否则,转换会失败。 装箱 装箱 是值类型到 object 类型的转换 对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。 内存 堆栈 托管堆 int i=10; I ? 10 object o =i; 10 o? 0023fa 装箱 int i = 10; object obj = i; //隐式装箱 object obj1 = (object)i; //显式装箱 if(obj is int) //int Console.WriteLine(“OK”); Console.WriteLine(obj.GetType()); //System.Int32 有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。 拆箱 拆箱 (取消装箱)是从 object 类型到值类型的 显式 转换。 内存 堆栈 托管堆 int i=10; I ? 10 object o =i; 10 o? 0023fa Int j=(int)o; j ? 10 拆箱 int i = 10; object obj = i; int j = (int)obj; 装箱、拆箱 示例 Static void Main() { Int32 x=5; Object o=x;//对x进行装箱;o指向已装箱对象 Int16 y=(Int16)O;//抛出一个invalidcastException } 当对一个对象执行拆箱操作时,转型的结果必须是它原来未装箱的类型—本例中即为int32. 装箱和拆箱 例如,对于如下简单的装箱和拆箱操作语句。 int i = 123; object obj = i;//Boxing if( obj is int ) int j = (int) obj;//Unboxing 更好的诠释装箱和拆箱操作,我借用MSDN关于“Boxing”的解释图,具体如下。 减少装箱和拆箱操作 原因有两个,主要是关于效率:一个就是对于堆的操作效率比较低;另一个就是对于堆上分配的内存资源,需要GC来回收,从而降低程序效率。 如何减少呢,涉及到这两个操作比较多的是,格式化输出操作,例如:String.Format,Console.WriteLine之类的语句。 例如: Console.WriteLine( Number list:{0}, {1}, {2},1,2,3 ); 对于“1,2,3”来说,相当于前面的“123”一样,需要经过装箱和拆箱两个操作。那么如何避免呢,其实只要向WriteLine传递引用类型数据即可,也就是按照如下的方式。 Console.WriteLine( Number list:{0}, {1}, {2}, 1.ToString(),2.ToString(),3.ToString() );? 由于“1.ToString()”的结果是String类型,属于引用类型,因此不牵

文档评论(0)

wxc6688 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档