[工学]c课件第4章 面向对象的高级编程.ppt

[工学]c课件第4章 面向对象的高级编程.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]c课件第4章 面向对象的高级编程

4.5 序列化与反序列化 4、XML序列化 (1)XML 序列化仅将对象的公共字段和属性值序列化为XML流,而不转换方法、索引器、私有字段或只读属性(只读集合除外)。 (2)XML 序列化不包括类型信息,即不能保证序列化后的对象在被反序列化时,变为同一类型的对象。 (3)XML序列化的实现步骤 Class1 user = new Class1(); user.AccountName = aa; XmlSerializer mySerializer = new XmlSerializer(typeof(Class1)); StreamWriter myWriter = new StreamWriter(UserInfo.xml); mySerializer.Serialize(myWriter, user); myWriter.Close(); 4.5 序列化与反序列化 (4)XML反序列化的步骤 Class1 c; XmlSerializer mySerializer = new XmlSerializer(typeof(Class1)); FileStream myFileStream = new FileStream(UserInfo.xml, FileMode.Open); c = (Class1) mySerializer.Deserialize(myFileStream); myFileStream.Close(); 注意: 反序列化一个对象时不会调用构造函数,这一点与创建对象不同。 4.6 泛型处理 泛型(Generic)一般用在集合和在集合上运行的方法中。.NET框架2.0以前的版本不支持泛型。 使用泛型具有以下明显的优点: 1)可以避免以下两个问题:内部实现代码冗余和困扰开发人员的含混不清的编译器错误提示; 2)类型安全; 3)二进制代码重用; 4)性能; 5)清晰性。 4.6 泛型-问题描述 public class Stack { object[] m_Items; public void Push(object item) {...} public object Pop() {...} } 使用举例: Stack stack = new Stack(); stack.Push(1); int number=(int)stack.Pop(); stack.Push(“str”); string str=(string)stack.Pop(); 基于Object的堆栈缺点 性能问题 值类型需频繁地装箱、拆箱,造成较多的垃圾碎片,增加垃圾回收的负担 引用类型需要强制类型转换 类型安全问题(更严重) 编译时任务类型都转换成object,无法保证运行时类型安全。 例如:Stack stack = new Stack(); stack.Push(“abc”); int number = (int)stack.Pop(); 4.6 泛型-解决办法 public class IntStack { int[] m_Items; public void Push(int item) {...} public int Pop() {...} } public class StringStack { string[] m_Items; public void Push(string item) {...} public string Pop() {...} } 功能相似,代码冗余!维护麻烦! 基于Object的 堆栈 IntStack StringStack 代码冗余,维护复杂,工作效率低 性能问题、类型安全问题 有没有好的解决办法? 有,泛型 解决方法-采用泛型 public class StackT { T[] m_Items; public void Push(T item) {...} public T Pop() {...} } 泛型是如何实现的? 在.NET 2.0中,泛型在IL(中间语言)和CLR本身中具有本机支持 编译泛型时,就像编译类一样,泛型仅保留一个占位符。 而用特定类型实例化的泛型代码,编译时会将泛型替换为实例化的特定类型。 泛型实现 public class StackT { T[] m_Items; public void Push(T item) {...} public T Pop() {...} } 使用举例: Stackint stack = new Stackint stack.Push(1); int number = stack.Po

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档