accp6.0s2階段深入.net平臺(tái)和編程_第1頁(yè)
accp6.0s2階段深入.net平臺(tái)和編程_第2頁(yè)
accp6.0s2階段深入.net平臺(tái)和編程_第3頁(yè)
accp6.0s2階段深入.net平臺(tái)和編程_第4頁(yè)
accp6.0s2階段深入.net平臺(tái)和編程_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十二章序列化和反序列化回顧與作業(yè)點(diǎn)評(píng)按要求完成編碼從控制臺(tái)輸入“我喜歡學(xué)習(xí)C# 語(yǔ)言!”,并保存到D盤hobby.txt將此文件從D盤復(fù)制到E盤Test目錄下讀“E:hobby.txt”,將文件內(nèi)容輸出到控制臺(tái)預(yù)習(xí)檢查將實(shí)例對(duì)象的狀態(tài)存儲(chǔ)到存儲(chǔ)介質(zhì)中的過程稱為什么?本章任務(wù)完成“網(wǎng)絡(luò)電視精靈”序列化方式持久化“我的電視臺(tái)”和“提醒信息”實(shí)現(xiàn)節(jié)目播放功能實(shí)現(xiàn)定時(shí)提醒功能本章目標(biāo)理解序列化和反序列化的概念能夠使用序列化/反序列化保持和恢復(fù)對(duì)象狀態(tài)擴(kuò)展持久化信息對(duì)“網(wǎng)絡(luò)電視精靈”持久化信息進(jìn)行擴(kuò)展定制的“我的電視臺(tái)”提醒信息增加提醒信息將提醒信息寫入save.txt文件12擴(kuò)展持久化信息/對(duì)定制的

2、電視臺(tái)信息進(jìn)行保存/添加對(duì)Remind的保存for (int index = 0; index this.seria.MyRemind.Count; index+) Remind remind = this.seria.MyRemindindex; writer.WriteLine(remind.MyProgram.PlayTime + | + remind.MyProgram.Median + | + remind.MyProgram.ProgramName + | + remind.MyProgram.FilePath + | + remind.RemindTime + | + remin

3、d.OwnChannel);1修改SaveAsText()方法 遍歷提醒集合,依次將信息寫入文本文件/讀取“我的電視臺(tái)”/ 讀取提醒信息line = reader.ReadLine();Remind remind = null;while (line != -End of Remind-) remind = new Remind(); propertyValues = line.Split(|); remind.MyProgram.PlayTime = Convert.ToDateTime(propertyValues0); remind.MyProgram.Median = property

4、Values1; . this.seria.MyRemind.Add(remind); line = reader.ReadLine();演示示例:保存和加載提醒信息逐行讀取提醒信息,并封裝為Remind對(duì)象修改LoadFromText()方法 2擴(kuò)展的麻煩添加更多的配置信息能否避免繁瑣的保存和讀取操作?需要編寫大量重復(fù)繁瑣的代碼每次增加配置信息都要修改保存和加載的方法內(nèi)存C# 對(duì)象文本文件對(duì)象屬性值神奇的方式保存對(duì)象的“全景圖”內(nèi)存C# 對(duì)象文件對(duì)象的二進(jìn)制格式public void Save() FileStream fs = new FileStream(filessave.bin, F

5、ileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, this.seria); fs.Close();直接保存對(duì)象序列化反序列化public void Load() /省略判斷文件是否存在 FileStream fs = new FileStream(filessave.bin, FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); this.seria = (SavingInfo)bf.Deserialize(fs); fs.

6、Close();直接獲取整個(gè)對(duì)象這種方式稱為序列化與反序列化什么是序列化序列化SavingInfo對(duì)象Seria提醒信息集合對(duì)象myRemind 我的電視臺(tái)集合對(duì)象myFavor存儲(chǔ)介質(zhì)存儲(chǔ)序列化是將對(duì)象的狀態(tài)存儲(chǔ)到特定存儲(chǔ)介質(zhì)中的過程內(nèi)存使用序列化要存儲(chǔ)的對(duì)象標(biāo)記為可序列化,包括它的父類和屬性的類使用二進(jìn)制方式存儲(chǔ)對(duì)象Serialize的語(yǔ)法using System.Runtime.Serialization.Formatters.Binary; /命名空間FileStream fs = new FileStream(filessave.bin, FileMode.Create);Binar

7、yFormatter bf = new BinaryFormatter();bf.Serialize(fs, this.seria);Serializablepublic class SavingInfo二進(jìn)制格式化器將對(duì)象以二進(jìn)制方式格式化為流Serialize ( Stream serializationStream, Object graph) 流對(duì)象演示示例:序列化保存?zhèn)€性化信息RemindChannelBaseTypeAChannelTypeBChannelTvProgram序列化的過程格式化程序 對(duì)象可否序列化對(duì)象的成員可否序列化將對(duì)象格式化寫入存儲(chǔ)介質(zhì)異常退出檢驗(yàn)序列化對(duì)象中的成

8、員 YYNN檢驗(yàn)是否標(biāo)識(shí)為Serializable 什么是反序列化把SavingInfo對(duì)象存儲(chǔ)成文件,怎么取出來(lái)呢?讀取反序列化則是從特定存儲(chǔ)介質(zhì)中的數(shù)據(jù)重新構(gòu)建對(duì)象的過程 存儲(chǔ)介質(zhì)SavingInfo對(duì)象Seria提醒信息集合對(duì)象myRemind 我的電視臺(tái)集合對(duì)象myFavor數(shù)據(jù)轉(zhuǎn)換為對(duì)象內(nèi)存使用反序列化將序列化好的SavingInfo數(shù)據(jù)反序列化為對(duì)象Deserialize的語(yǔ)法FileStream fs = new FileStream(filessave.bin, FileMode.Open);BinaryFormatter bf = new BinaryFormatter();

9、this.seria = (SavingInfo)bf.Deserialize(fs);fs.Close();將指定流反序列化類型轉(zhuǎn)換public Object Deserialize ( Stream serializationStream ) 流對(duì)象需要類型轉(zhuǎn)換演示示例:反序列化獲取個(gè)性化信息序列化和反序列化優(yōu)勢(shì)保存了對(duì)象的“全景圖”能追蹤對(duì)象內(nèi)所包含的所有引用,并保存那些對(duì)象,又能對(duì)對(duì)象內(nèi)包含的每個(gè)這樣的引用進(jìn)行追蹤,依次類推,形成“對(duì)象網(wǎng)”幾個(gè)重要的類SerializableAttributeFormatter應(yīng)用場(chǎng)合將對(duì)象狀態(tài)持久化到文件分布式應(yīng)用(網(wǎng)絡(luò)上傳輸對(duì)象)特性特性(attr

10、ibutes)添加的元數(shù)據(jù),即一些描述性關(guān)鍵字添加針對(duì)程序中的元素如:類、字段、方法、屬性命名時(shí)以Attribute結(jié)尾: SerializableAttribute使用時(shí)省略AttributeSerializablepublic class SavingInfo標(biāo)識(shí)應(yīng)用的元素是可被序列化的可序列化就是這個(gè)類的一個(gè)特性public sealed class SerializableAttribute 特性其實(shí)是一個(gè)類標(biāo)識(shí)不能被繼承使用特性C# 常用特性O(shè)bsoleteAttributeclass Program Obsolete(不要使用舊的方法, 請(qǐng)使用新的方法, true) static

11、void Old() static void New() public static void Main() Old(); 標(biāo)記不該再被使用的方法Old()Old被調(diào)用時(shí),視為一種錯(cuò)誤如果設(shè)為false,調(diào)用時(shí)不視為錯(cuò)誤演示示例:使用預(yù)定義特性O(shè)bsolete即: ObsoleteAttribute類定義自己的特性定義特性滿足個(gè)性化需求記錄代碼作者class AuthorAttribute:Attribute public string Name; public string Version; public AuthorAttribute() public AuthorAttribute(st

12、ring name,string version) this.Name = name; this.Version = version; 定義特性以Attribute結(jié)尾自定義特性必須繼承Attribute類使用自定義特性Author(蓋茨,1.0)class MyText public void Show() Console.WriteLine(Hello!); 以Author或AuthorAttribute作為特性名給屬性賦值static void Main(string args) AuthorAttribute authorAttributed = (AuthorAttribute)At

13、tribute.GetCustomAttribute(typeof(MyText),typeof(AuthorAttribute); if (authorAttributed != null) Console.WriteLine(Name:0,authorAttributed.Name); Console.WriteLine(Version:0,authorAttributed.Version); 獲取特性信息運(yùn)行時(shí)查看代碼作者和版本演示示例:運(yùn)行時(shí)獲取屬性附加信息指導(dǎo)用戶及訂單信息訓(xùn)練要點(diǎn)序列化與反序列化需求說明網(wǎng)上購(gòu)物時(shí)某用戶填寫訂單,訂單內(nèi)容為產(chǎn)品列表,保存在“save.bin”中運(yùn)行時(shí)

14、,如果不存在“save.bin”,則進(jìn)行新訂單錄入,如果存在,則顯示并計(jì)算客戶所需付款指導(dǎo)用戶及訂單信息實(shí)現(xiàn)思路編寫Init()方法提供從控制臺(tái)輸入購(gòu)買信息編寫Save()方法保存對(duì)象到“save.bin”編寫Load()方法獲得對(duì)象,計(jì)算客戶所需付款完成時(shí)間:25分鐘練習(xí)持久化定制信息需求說明序列化方式保存用戶定制的自己喜歡的電視臺(tái)和提醒信息反序列化解析用戶定制的信息,并在系統(tǒng)啟動(dòng)時(shí)進(jìn)行加載完成時(shí)間:25分鐘共性問題集中講解常見調(diào)試問題及解決辦法代碼規(guī)范問題共性問題集中講解練習(xí)實(shí)現(xiàn)節(jié)目播放需求說明完善“網(wǎng)絡(luò)電視精靈”,實(shí)現(xiàn)節(jié)目播放功能完成時(shí)間:20分鐘共性問題集中講解常見調(diào)試問題及解決辦法代

15、碼規(guī)范問題共性問題集中講解指導(dǎo)實(shí)現(xiàn)動(dòng)態(tài)提醒窗體訓(xùn)練要點(diǎn)復(fù)習(xí)動(dòng)態(tài)加載控件給控件動(dòng)態(tài)綁定事件需求說明編寫提醒窗體,根據(jù)提醒節(jié)目列表,動(dòng)態(tài)顯示以下內(nèi)容節(jié)目名稱節(jié)目播放鏈接點(diǎn)擊節(jié)目名稱,可進(jìn)行播放指導(dǎo)實(shí)現(xiàn)動(dòng)態(tài)提醒窗體難點(diǎn)分析動(dòng)態(tài)加載控件給控件動(dòng)態(tài)綁定事件1、創(chuàng)建對(duì)象2、設(shè)置對(duì)象屬性3、添加到窗體:this.Controls.Add(lb);Label對(duì)象/給控件綁定單擊事件lb.Click += new EventHandler(lb_Click);public void lb_Click(object sender, EventArgs e) PlayForm play = PlayForm.GetSingleton(); Label lb = (Label)sender; TvProgram tv = (TvProgram)lb.Tag; play.Play(tv.FilePath); play.Show();完成時(shí)間:25分鐘編寫標(biāo)簽響應(yīng)事件練習(xí)實(shí)現(xiàn)定時(shí)提醒需求說明時(shí)鐘每隔1分鐘進(jìn)行掃描,查看提醒節(jié)目列表,按照提醒時(shí)間,定時(shí)彈出提醒窗口完成時(shí)間:20分鐘共性問題集中講解常見調(diào)試問題及解決辦法代碼規(guī)范問題共性問題集中講解“網(wǎng)絡(luò)電視精靈”總結(jié)總結(jié)實(shí)現(xiàn)思路分析需求,抽象出類及類之間的關(guān)系搭建項(xiàng)目,編寫類搭建窗體,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論