C中对象创建的方式_第1页
C中对象创建的方式_第2页
C中对象创建的方式_第3页
C中对象创建的方式_第4页
C中对象创建的方式_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C#中对象创建的方式•利用new创建•利用对象的MemberwiseCloneMemberwiseClone方式创建一个浅表副本,方式是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。若是字段是值类型的,则对该字段执行逐位复制。若是字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。一个类无法事前明白她所必需创建的对象的类的时候。2.当一个类要让其派生类决定构建对象时。3.当类将创建对象的职责委托给多个协助他的派生类之一,同时你希望通过所委托的派生类来集中管理对象创建逻辑时。•利用序列化和反序列化创建一、概述当两个进程在进行远程通信时,彼此能够发送各类类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把那个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。把对象转换为字节序列的进程称为对象的序列化。把字节序列恢复为对象的进程称为对象的反序列化。二、对象的序列化主要有两种用途:把对象的字节序列永久地保留到硬盘上,通常寄存在一个文件中;咱们常常需要将对象的字段值保留到磁盘中,并在以后检索此数据。虽然不利用序列化也能完成这项工作,但这种方式通常很繁琐而且容易犯错,而且在需要跟踪对象的层次结构时,会变得愈来愈复杂。能够想象一下编写包括大量对象的大型业务应用程序的情形,程序员不能不为每一个对象编写代码,以便将字段和属性保留至磁盘和从磁盘还原这些字段和属性。序列化提供了轻松实现那个目标的快捷方式。公共语言运行时(CLR)管理对象在内存中的散布,.NET框架则通过利用反射提供自动的序列化机制。对象序列化后,类的名称、程序集和类实例的所有数据成员均被写入存储媒体中。对象通常常利用成员变量来存储对其他实例的引用。类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次。.NET框架所提供的序列化体系结构能够自动正确处置对象图表和循环引用。对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必需标记为Serializable(请参阅基本序列化)。不然,当序列化程序试图序列化未标记的对象时将会出现异样。当反序列化已序列化的类时,将从头创建该类,并自动还原所有数据成员的值。在网络上传送对象的字节序列。对象仅在创建对象的应用程序域中有效。除非对象是从MarshalByRefObject派生取得或标记为 Serializable,不然,任何将对象作为参数传递或将其作为结果返回的尝试都将失败。若是对象标记为 Serializable,则该对象将被自动序列化,并从一个应用程序域传输至另一个应用程序域,然后进行反序列化,从而在第二个应用程序域中产生出该对象的一个精准副本。此进程通常称为按值封送。若是对象是从MarshalByRefObject派生取得,则从一个应用程序域传递至另一个应用程序域的是对象引用,而不是对象本身。也能够将从MarshalByRefObject派生取得的对象标记为Serializable。远程利用此对象时,负责进行序列化并已预先配置为SurrogateSelector的格式化程序将控制序列化进程,并用一个代理替换所有从MarshalByRefObject派生取得的对象。若是没有预先配置为SurrogateSelector,序列化体系结构将遵从下面的标准序列化规则.三、.NET提供了三种序列化方式[1]、XMLSerializer[2]、SOAPSerializer[3]、BinarySerializer四、大体序列化要使一个类可序列化,最简单的方式是利用Serializable属性对它进行标记,如下所示:[Serializable]publicclassMyObject{public intn1 = 0;public intn2 = 0;public String str = null;}[BinarySerializer]将此类的一个实例序列化为一个文件:MyObjectobj=newMyObject();=1;=24;="一些字符串";[Formatterformatter=newBinaryFormatter();Streamstream=new-,…bj);^seaiii,vo;();反序列化:[Formatterformatter=newBinaryFormatter();Streamstream=newFileStream("", ,) ;MyObjectobj=(MyObject)(fromStream);();[XMLSerializer]将此类的实例序列化成一个Xml文件.XmlSerializerser=newXmlSerializer());(newFileStream(@"",,obj);反序列化:XmlSerializerserializer=newXmlSerializer("MyObject"));MyObjectmy=(MyObject)(newFileStream(@"",);说明:利用二进制格式化程序进行序列化。您只需创建一个要利用的流和格式化程序的实例,然后挪用格式化程序的Serialize方式。流和要序列化的对象实例作为参数提供给此挪用。类中的所有成员变量(乃至标记为private的变量)都将被序列化,但这一点在本例中未明确表现出来。在这一点上,二进制序列化不同于只序列化公共字段的XML序列化程序。将对象还原到它以前的状态也超级容易。第一,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。[SOAPSerializer]若是要求具有可移植性,请利用SoapFormatter。所要做的更改只是将以上代码中的BinaryFormatter换SoapFormatter,而Serialize和Deserialize挪用不变。利用反射创建namespaceConsoleApplication1日叫publicclassReflectionSample{privatestringfirstName=;privatestringlastName=;中申publicReflectionSample。{}publicReflectionSample(stringfirstName,stringlastName){=firstName;=lastName;卜}publicstringSayHello(){return("Hello{0}{1}",,;卜}publicstaticstringStaticHello()中申{return("Hello,Iamastaticmethod");卜}卜}L)创建对象,方式一:Assemblyasm=();Objectobj=true);方式二:1ObjectHandleh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论