深入.net平臺和編程_第1頁
深入.net平臺和編程_第2頁
深入.net平臺和編程_第3頁
深入.net平臺和編程_第4頁
深入.net平臺和編程_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第三章使用集合組織相關數據預習檢查ArrayList中如何添加數據?定義泛型集合時的特殊語法符號是什么?如何遍歷一個Hashtable類型的集合對象中的元素?使用泛型集合類需要引入什么命名空間?請使用泛型集合存儲5名學生信息(包括編號、姓名、性別、家庭住址),并遍歷輸出他們每個人的姓名集中測試2/44回顧與作業(yè)點評說出調用方法后,num及學生姓名和年齡的值點評作業(yè)的提交情況和共性問題staticvoidMain(string[]args){Student[]stus=newStudent[2]{newStudent(),newStudent()};stus[0].Age=10;stus[0].Name="張靚";stus[1].Age=19;stus[1].Name="小新";intnum=0;ChangeAge(stus,num);}staticvoidChangeAge(Student[]stu,intnum){for(inti=0;i<stu.Length;i++){if(stu[i].Age<15){stu[i].Age=15;num++;}}}num:0張靚:15小新:19代碼閱讀作業(yè)點評3/44本章任務實現員工信息管理(新增、查詢、刪除)實現員工考勤管理(簽到、簽退)4/44本章目標理解集合的概念會使用集合初始化器熟練使用集合訪問數據理解泛型的概念熟練使用各種泛型集合5/44數組的局限性能否建立一個動態(tài)的“數組”?//3個工程師對象組成的數組SE[

]engineers=newSE[3];engineers[0]=newSE();engineers[1]=newSE();……如果每個部門的人數不固定部門中來了一個新同事調整大小困難增加元素困難重新定義數組數組長度定義很大問題6/44可維護動態(tài)長度的集合ArrayList是一個可動態(tài)維護長度的集合新增元素可刪除元素可訪問單個元素objectobjectobjectobject0123索引(下標)object40123ArrayList自動調整索引通過索引訪問7/44ArrayList的初始化引入System.Collections命名空間實例化ArrayList對象usingSystem.Collections;…ArrayListengineers=newArrayList();ArrayListengineers=newArrayList(5)可以指定長度引入命名空間實例化一個對象常見錯誤未引入命名空間定義時未實例化示例注意實現步驟8/44ArrayList添加元素int

Add(Objectvalue)//添加一個對象到集合的末尾ArrayListengineers=newArrayList();//創(chuàng)建工程師對象SEjack=newSE();jack.Name="王小毛";……//添加對象到集合engineers.Add(jack);//獲取集合元素的數目MessageBox.Show(engineers.Count);返回索引語法示例提示演示示例1:向集合添加元素向ArrayList中添加值類型的元素時,會執(zhí)行裝箱處理!9/44集合初始化器C#3.0語言的新特性之一由一系列元素初始化器構成,包圍在“{”和“}”之間,并使用逗號進行分隔示例ArrayListengineers=newArrayList(){

newSE(){Name="王小毛",Age=26,Gender=Gender.male,ID="000",Popularity=10},

newSE(){Name="周新雨",Age=22,Gender=Gender.female,ID="111",Popularity=20},

newSE(){Name="張燁",Age=30,Gender=Gender.male,ID="222",Popularity=20}};演示示例2:集合初始化器構造集合10/44訪問ArrayList單個元素(類型)ArrayList[index]//按指定索引(下標)取得對象SEengineer=(SE)

engineers[0];MessageBox.Show(engineer.SayHi());…轉換為工程師對象需要類型轉換語法示例演示示例3:訪問集合單個元素11/44ArrayList的遍歷使用和數組類似的方式(通過索引)foreach(Objectobj

inengineers){SEseForeach=(SE)obj;Console.WriteLine(seForeach.Name);}王小毛周新雨張燁for(inti=0;i<engineers.Count;i++){SEseFor=(SE)engineers[i];Console.WriteLine(seFor.Name);}foreach方式(通過對象)演示示例4:遍歷集合元素12/44刪除ArrayList的元素ArrayList.Remove(對象名)//刪除指定對象名的對象ArrayList.RemoveAt(index)//刪除指定索引的對象ArrayList.Clear()//清除集合內的所有元素engineers.RemoveAt(0);//刪除索引為0的元素

engineers.Remove(ema);//刪除元素emaMessageBox.Show(string.Format("部門共包括{0}個工程師。",engineers.Count.ToString()));SEleave=(SE)engineers[0];MessageBox.Show(leave.SayHi());語法示例剩余的元素會自動調整索引注意演示示例5:刪除集合元素13/44常見錯誤2-1運行這段代碼為何會發(fā)生錯誤?//添加元素engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);//刪除元素engineers.RemoveAt(0);engineers.RemoveAt(1);engineers.RemoveAt(2);索引會自動調整,刪除兩個元素后,不再有索引“2”代碼閱讀演示示例:常見錯誤114/44常見錯誤2-2以下代碼能否刪除與se2屬性相同的jack對象?//定義三個SE對象(省略)SEse2=newSE();

se2.Name="王小毛";se2.Age=26;……engineers.Add(se2);engineers.Remove(se2);…定義對象se2與前面定義的jack對象屬性值相同代碼閱讀演示示例:常見錯誤215/44小結學生類Student已定義,屬性為:Name、Age使用ArrayList存儲學生集合添加兩個學生(周杰倫,22;楊伊,21)使用for和foreach遍歷學生信息現場編程16/44為什么使用HashtableArrayList通過索引獲取對象是否能夠通過關鍵字獲取該對象呢?動態(tài)可維護長度可通過關鍵字檢索C#提供另一種集合集合:HashtableSEengineer=(SE)

engineers[0];ArrayList中元素頻繁變化,跟蹤元素下標很困難問題17/44什么是HashtableArrayList每個元素對應一個索引Hashtable通常稱為哈希表根據鍵(Key)可以查找到相應的值(Value)objectobjectobjectobjectobject0123…ArrayList索引KeyValueKeyValueKeyValueKeyValueKeyValueHashtable值鍵鍵和值一一對應18/44使用Hashtable給Hashtable添加元素Hashtableengineers=newHashtable();

engineers.Add(jack.ID,

jack);KeyValueSEse2=(SE)engineers["000"];se2.SayHi();通過key獲取元素engineers.Remove("000");…通過key刪除元素獲取Hashtable的元素刪除Hashtable的元素需要類型轉換19/44如何遍歷Hashtable?Hashtable的遍歷foreach(Objectobjinengineers.Values){SEse=(SE)obj;Console.WriteLine(se.Name);}KeyValueKeyValueKeyValueKeyValueKeyValueValues不能遍歷整個對象,而是遍歷Valuesforeach(Objectobjinengineers.Keys){Console.WriteLine((string)obj);}可以遍歷Keys問題Keysforeach(DictionaryEntryeninengineers){Console.WriteLine((string)obj);Console.WriteLine(((SE)en.value).Name);}可以遍歷鍵/值對演示示例6:Hashtable操作20/44小結刪除一個ArrayList元素有幾種方法?Hashtable和ArrayList的主要區(qū)別是什么?提問21/44類型安全2-1考慮出現的問題PMpm=newPM();pm.Name="蓋茨";pm.Id="8230";……engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);engineers.Add(pm);//添加一個項目經理對象能否加入一個PM對象?foreach(Objectobjinengineers){

SEengineer=(SE)obj;

MessageBox.Show(engineer.SayHi());}遍歷這個集合是否有問題?代碼閱讀演示示例7:類型安全22/44類型安全2-2發(fā)生異常的原因SE集合王小毛周新雨張燁蓋茨添加對象遍歷集合,轉換為SE對象PM對象運行錯誤分析注意使用集合存儲數據時容易出現的問題(1)對象存儲不易控制(2)類型轉換容易出錯!23/44使用List<T>加強類型安全使用List<T>……List<SE>engineers=newList<SE>();//將SE對象加入工程師集合engineers.Add(jack);engineers.Add(joe);engineers.Add(ema);engineers.Add(pm);//添加一個項目經理對象……編譯出錯泛型集合演示示例8:泛型集合List保證類型安全24/44什么是泛型集合泛型<T>最常見的用途是創(chuàng)建集合類泛型集合可以約束集合內的元素類型典型泛型集合List<T>、Dictionary<K,V><T>、<K,V>表示該泛型集合中的元素類型List<SE>SE對象PM對象允許添加不允許添加SE對象無需轉換類型25/44使用List<T>泛型集合命名空間:System.Collections.Generic創(chuàng)建List<T>泛型集合遍歷List<SE>engineers=newList<SE>();foreach(SEseinengineers){MessageBox.Show(se.SayHi());}只能保存SE對象無需類型轉換使用步驟技巧演示示例9:泛型集合List<T>操作List<T>的訪問方式與ArrayList類似,可對比學習!26/44List<T>與ArrayList訪問List<T>與ArrayList的對比是否有Hashtable那樣存儲Key和Value形式的泛型集合呢?問題異同點

List<T>

ArrayList不同點增加元素時類型嚴格檢查可以增加任何類型添加和讀取值類型元素時,無需裝箱拆箱添加和讀取值類型元素時,需要裝箱拆箱相同點通過索引訪問集合的元素添加對象方法相同通過索引刪除元素27/44Dictionary<K,V>概述Dictionary<K,V>通常稱為字典<K,V>約束集合中元素類型編譯時檢查類型約束無需裝箱拆箱操作與Hashtable操作類似28/44Dictionary<K,V>的使用利用Dictionary<K,V>存儲工程師列表engineers.Add(jack.ID,jack);…SEengineer=engineers["000"];…engineers.Remove("000");…添加一對Key/Value通過Key獲取元素通過Key刪除元素//Dictionary<string,SE>方式foreach(SEseinengineers.Values){MessageBox.Show(se.SayHi());}遍歷ValuesDictionary<string,SE>engineers

=newDictionary<string,SE>();Key存儲String類型Value存儲SE類型演示示例10:泛型集合Dictionary操作29/44Dictionary<K,V>與Hashtable訪問Dictionary<K,V>與Hashtable的對比異同點

Dictionary<K,V>Hashtable不同點增加元素時類型嚴格檢查可以增加任何類型無需裝箱拆箱需要裝箱拆箱相同點通過Key獲取Value添加對象方法相同遍歷方法相同30/44泛型泛型操作的數據類型被定義為一個參數泛型類如何選中ComboBox中的一項后,獲得對應的一個對象問題語法publicclass類名<T>{//……}T指類型參數,代表具體的數據類型,可以是類類型,也可以是基本數據類型演示示例11:泛型類31/44泛型的重要性泛型的重要性實現代碼重用,未來的主流技術1性能高,避免繁瑣的裝箱拆箱2提供了更好的類型安全性3

CLR支持泛型432/44學員操作—實現考勤信息管理2-1需求說明實現員工信息和考勤管理系統(tǒng)實現新增員工(員工ID唯一)使用DataGridView控件展示員工列表指導講解需求說明33/44學員操作—實現考勤信息管理2-2實現思路實現新增功能實現展示員工列表功能確保員工信息的唯一性在添加信息時遍歷員工列表。如果有員工ID和新增員工的ID相同,則提示不可添加使用DataGridView控件展示集合信息this.dgvProgrammer.DataSource=newBindingList<SE>(list);指導提示完成時間:30分鐘34/44學員操作—員工信息查詢和刪除需求說明實現根據員工工號進行模糊查詢實現刪除員工信息練習完成時間:20分鐘35/44共性問題集中講解常見問題及解決辦法代碼規(guī)范問題調試技巧共性問題集中講解36/44學員操作—簽到和簽退2-1需求說明實現員工簽到和簽退每天只能簽到1次簽退前必須已經簽到指導講解需求說明37/44學員操作—簽到和簽退2-2實現思路編寫考勤記錄類RecordRecord屬性:員工ID、員工姓名、簽到時間、簽退時間使用Dictionary<string,Reco

溫馨提示

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

評論

0/150

提交評論