欢迎来到天天文库
浏览记录
ID:62033035
大小:82.50 KB
页数:9页
时间:2021-04-15
《C#中对象创建的方式.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C#中对象创建的方式·使用new创建·使用对象的MemberwiseCloneMemberwiseClone方法创建一个浅表副本,方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象.using System;usingSystem.IO;ﻫusingSystem。Runtime.Serialization.Formatters.Binary;namespaceCloneDemoﻫ{ [Serializable]ﻫ classDemoC
2、lassﻫ{ﻫ publicinti = 0;ﻫ publicint[] iArr={1,2,3 };ﻫ publicDemoClass Clone1() {ﻫ returnthis.MemberwiseClone()asDemoClass; } publicDemoClassClone2()ﻫ {MemoryStreamstream= newMemoryStream();ﻫ BinaryFormatterformatter= newBinaryFormatter(); formatter.Serialize(stream,this);ﻫ stream.Positi
3、on= 0; returnformatter.Deserialize(stream)as DemoClass; } }ﻫﻫclassProgram{ﻫ staticvoidMain(string[]args)ﻫ{ DemoClassa= newDemoClass(); a。i=10; a.iArr= newint[] {8, 9, 10}; DemoClass b=a.Clone1();ﻫ DemoClass c=a。Clone2();ﻫ //更改a 对象的iArr[0],导致b对象的iArr[0]也发生了变化ﻫ a。iArr[0]=
4、88;ﻫﻫ Console.WriteLine("MemberwiseClone");ﻫ Console.WriteLine(b.i); foreach(variteminb。iArr) { Console。WriteLine(item); }ﻫ Console。WriteLine(”Clone2");ﻫ Console.WriteLine(c.i);ﻫ foreach(var iteminc。iArr) {ﻫ Console.WriteLine(item); }ﻫConsole.ReadLine();ﻫ } }}·使用工厂方
5、法创建 定义创建对象的接口,并由派生类决定那一个类来创建实例.即工厂方法将创建对象的责任委托(延迟)到了派生类创建。适用情况:1。当一个类无法事先知道她所必须创建的对象的类的时候。2。当一个类要让其派生类决定构建对象时.3。当类将创建对象的职责委托给多个协助他的派生类之一,同时你希望通过所委托的派生类来集中管理对象创建逻辑时。 ·使用序列化和反序列化创建 一、概述ﻫ 当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。
6、ﻫ 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化。 二、对象的序列化主要有两种用途:ﻫ 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 我们经常需要将对象的字段值保存到磁盘中,并在以后检索此数据.尽管不使用序列化也能完成这项工作,但这种方法通常很繁琐而且容易出错,并且在需要跟踪对象的层次结构时,会变得越来越复杂。可以想象一下编写包含大量对象的大型业务应用程序的情形,程序员不得不为每一个对象编写代码,以便将字段和属性保存至磁盘以及从磁 盘还原这些字段和属性.序列化提供了轻松实现这个目标的快捷方法。
7、公共语言运行时 (CLR) 管理对象在内存中的分布,。NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,类的名称、程序集以及类实例的所有数据成员均被写入存储媒体中。对象通常用成员变量来存储对其他实例的引用。类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保同一对象不被序列化多次。。NET 框架所提供的序列化体系结构可以自动正确处理对象图表和循环引用。对对象图表的唯一要求是,由正在进行序列化的对象所引用的所有对象都必须标记为 Serializable
此文档下载收益归作者所有