C中對象創(chuàng)建的方式_第1頁
C中對象創(chuàng)建的方式_第2頁
C中對象創(chuàng)建的方式_第3頁
C中對象創(chuàng)建的方式_第4頁
C中對象創(chuàng)建的方式_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C#中對象創(chuàng)建的方式?利用new創(chuàng)建?利用對象的MemberwiseCloneMemberwiseClone方式創(chuàng)建一個淺表副本,方式是創(chuàng)建一個新對象,然后將當(dāng)前對象的非靜態(tài)字段復(fù)制到該新對象。若是字段是值類型的,則對該字段執(zhí)行逐位復(fù)制。若是字段是引用類型,則復(fù)制引用但不復(fù)制引用的對象;因此,原始對象及其復(fù)本引用同一對象。一個類無法事前明白她所必需創(chuàng)建的對象的類的時候。2.當(dāng)一個類要讓其派生類決定構(gòu)建對象時。3.當(dāng)類將創(chuàng)建對象的職責(zé)委托給多個協(xié)助他的派生類之一,同時你希望通過所委托的派生類來集中管理對象創(chuàng)建邏輯時。?利用序列化和反序列化創(chuàng)建一、概述當(dāng)兩個進(jìn)程在進(jìn)行遠(yuǎn)程通信時,彼此能夠發(fā)送各類類型的數(shù)據(jù)。無論是何種類型的數(shù)據(jù),都會以二進(jìn)制序列的形式在網(wǎng)絡(luò)上傳送。發(fā)送方需要把那個對象轉(zhuǎn)換為字節(jié)序列,才能在網(wǎng)絡(luò)上傳送;接收方則需要把字節(jié)序列再恢復(fù)為對象。把對象轉(zhuǎn)換為字節(jié)序列的進(jìn)程稱為對象的序列化。把字節(jié)序列恢復(fù)為對象的進(jìn)程稱為對象的反序列化。二、對象的序列化主要有兩種用途:把對象的字節(jié)序列永久地保留到硬盤上,通常寄存在一個文件中;咱們常常需要將對象的字段值保留到磁盤中,并在以后檢索此數(shù)據(jù)。雖然不利用序列化也能完成這項(xiàng)工作,但這種方式通常很繁瑣而且容易犯錯,而且在需要跟蹤對象的層次結(jié)構(gòu)時,會變得愈來愈復(fù)雜。能夠想象一下編寫包括大量對象的大型業(yè)務(wù)應(yīng)用程序的情形,程序員不能不為每一個對象編寫代碼,以便將字段和屬性保留至磁盤和從磁盤還原這些字段和屬性。序列化提供了輕松實(shí)現(xiàn)那個目標(biāo)的快捷方式。公共語言運(yùn)行時(CLR)管理對象在內(nèi)存中的散布,.NET框架則通過利用反射提供自動的序列化機(jī)制。對象序列化后,類的名稱、程序集和類實(shí)例的所有數(shù)據(jù)成員均被寫入存儲媒體中。對象通常常利用成員變量來存儲對其他實(shí)例的引用。類序列化后,序列化引擎將跟蹤所有已序列化的引用對象,以確保同一對象不被序列化多次。.NET框架所提供的序列化體系結(jié)構(gòu)能夠自動正確處置對象圖表和循環(huán)引用。對對象圖表的唯一要求是,由正在進(jìn)行序列化的對象所引用的所有對象都必需標(biāo)記為Serializable(請參閱基本序列化)。不然,當(dāng)序列化程序試圖序列化未標(biāo)記的對象時將會出現(xiàn)異樣。當(dāng)反序列化已序列化的類時,將從頭創(chuàng)建該類,并自動還原所有數(shù)據(jù)成員的值。在網(wǎng)絡(luò)上傳送對象的字節(jié)序列。對象僅在創(chuàng)建對象的應(yīng)用程序域中有效。除非對象是從MarshalByRefObject派生取得或標(biāo)記為 Serializable,不然,任何將對象作為參數(shù)傳遞或?qū)⑵渥鳛榻Y(jié)果返回的嘗試都將失敗。若是對象標(biāo)記為 Serializable,則該對象將被自動序列化,并從一個應(yīng)用程序域傳輸至另一個應(yīng)用程序域,然后進(jìn)行反序列化,從而在第二個應(yīng)用程序域中產(chǎn)生出該對象的一個精準(zhǔn)副本。此進(jìn)程通常稱為按值封送。若是對象是從MarshalByRefObject派生取得,則從一個應(yīng)用程序域傳遞至另一個應(yīng)用程序域的是對象引用,而不是對象本身。也能夠?qū)腗arshalByRefObject派生取得的對象標(biāo)記為Serializable。遠(yuǎn)程利用此對象時,負(fù)責(zé)進(jìn)行序列化并已預(yù)先配置為SurrogateSelector的格式化程序?qū)⒖刂菩蛄谢M(jìn)程,并用一個代理替換所有從MarshalByRefObject派生取得的對象。若是沒有預(yù)先配置為SurrogateSelector,序列化體系結(jié)構(gòu)將遵從下面的標(biāo)準(zhǔn)序列化規(guī)則.三、.NET提供了三種序列化方式[1]、XMLSerializer[2]、SOAPSerializer[3]、BinarySerializer四、大體序列化要使一個類可序列化,最簡單的方式是利用Serializable屬性對它進(jìn)行標(biāo)記,如下所示:[Serializable]publicclassMyObject{public intn1 = 0;public intn2 = 0;public String str = null;}[BinarySerializer]將此類的一個實(shí)例序列化為一個文件:MyObjectobj=newMyObject();=1;=24;="一些字符串";[Formatterformatter=newBinaryFormatter();Streamstream=new-,…bj);^seaiii,vo;();反序列化:[Formatterformatter=newBinaryFormatter();Streamstream=newFileStream("", ,) ;MyObjectobj=(MyObject)(fromStream);();[XMLSerializer]將此類的實(shí)例序列化成一個Xml文件.XmlSerializerser=newXmlSerializer());(newFileStream(@"",,obj);反序列化:XmlSerializerserializer=newXmlSerializer("MyObject"));MyObjectmy=(MyObject)(newFileStream(@"",);說明:利用二進(jìn)制格式化程序進(jìn)行序列化。您只需創(chuàng)建一個要利用的流和格式化程序的實(shí)例,然后挪用格式化程序的Serialize方式。流和要序列化的對象實(shí)例作為參數(shù)提供給此挪用。類中的所有成員變量(乃至標(biāo)記為private的變量)都將被序列化,但這一點(diǎn)在本例中未明確表現(xiàn)出來。在這一點(diǎn)上,二進(jìn)制序列化不同于只序列化公共字段的XML序列化程序。將對象還原到它以前的狀態(tài)也超級容易。第一,創(chuàng)建格式化程序和流以進(jìn)行讀取,然后讓格式化程序?qū)ο筮M(jìn)行反序列化。[SOAPSerializer]若是要求具有可移植性,請利用SoapFormatter。所要做的更改只是將以上代碼中的BinaryFormatter換SoapFormatter,而Serialize和Deserialize挪用不變。利用反射創(chuàng)建namespaceConsoleApplication1日叫publicclassReflectionSample{privatestringfirstName=;privatestringlastName=;中申publicReflectionSample。{}publicReflectionSample(stringfirstName,stringlastName){=firstName;=lastName;卜}publicstringSayHello(){return("Hello{0}{1}",,;卜}publicstaticstringStaticHello()中申{return("Hello,Iamastaticmethod");卜}卜}L)創(chuàng)建對象,方式一:Assemblyasm=();Objectobj=true);方式二:1ObjectHandleh

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論