思勝.net高級培訓基礎(chǔ)視頻3學員筆記_第1頁
思勝.net高級培訓基礎(chǔ)視頻3學員筆記_第2頁
思勝.net高級培訓基礎(chǔ)視頻3學員筆記_第3頁
思勝.net高級培訓基礎(chǔ)視頻3學員筆記_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

1、大家在學習過程中有任何技術(shù)問題可以提問到思勝地址: HYPERLINK http:/w/forum/forum http:/w/forum/forum.技術(shù)問題版塊,思勝幫大家免費解決,大家一起學習,共同進步!foreach ()的時候里面的主體必須是要支持支持System.Collections.IEnumerable1、 可迭代/ C# 中語法糖/ foreach 關(guān)鍵字中使用的集合,/ 必須實現(xiàn)接口 System.Collections.IEnumerable foreach (string name in list) /組合Console.Wriine(name);/ 為了支持遍歷,返

2、回一個支持遍歷的接口的對象/ 迭代器public System.Collections.IEnumeratetEnumerator()/ 創(chuàng)建一個用來迭代這個集合的迭代器對象MyLinkedListEnumerator enumerator= new MyLinkedListEnumerator(this.header); return enumerator;namespace LinkListSample/ 專門用來迭代 MyLinkedList 的迭代器public class MyLinkedListEnumerator: System.Collections.IEnumeratorpr

3、ivate Node header; private Node current;/ 當然要與的 MyLinkedList 有緊密的關(guān)系/ 要求構(gòu)造函數(shù)中得到列表中的 header 指向的節(jié)點public MyLinkedListEnumerator( Node header )this.header = header; this.current = this.header;public object Currentgetif (Object.ReferenceEquals(this.header, this.current)throw new System.InvalidOperationEx

4、ception(在當前值之前,必須 MoveNext.);return this.current.Name;public bool MoveNext()bool isExist = false;if (this.current.Next != null)this.current = this.current.Next; isExist = true;return isExist;public void Reset()this.current = this.header;2、 using ()就是要支持System.Idis集合的問題 :eable(1)System.Collections.Ie

5、numerator 遍歷 current 、 movwnext、resetusing System.Collections.Generic; System.Collections 命名空間包含接口和類,這些接口和類定義各種對象(如列表、隊列、位數(shù)組、哈希表和字典)的集合。接口的實例,盲人摸象。大柱子,扇子,繩子,肚子,棍子,從不同的角度去認識和理解它,從基類派生,不可改變。從很多角度去看問題。通過接口來了解集合的誕生。對大家要有的幫助。(2)Icollection copy to count 定義所有非泛型結(jié)合的大小(有索引,賦予數(shù)組特性,基于數(shù)組的列表),枚舉數(shù)和同步方法。Copy to 將

6、鏈表存在數(shù)組 indexcount,publicerface ISet : System.Collections.IEnumerable, System.Collections.ICollection/void Add(object obj); bool Contains(object obj);void clear();但是還是不能使用索引(集合的邏輯結(jié)構(gòu))只讀的 獲取個數(shù)數(shù)組(物理的結(jié)構(gòu))的是length多線程 一個線程沒問題, 動態(tài),但是數(shù)值卻是不行的。一半在操作,一半在遍歷,如何解決這些問題?就是線程同步,就需要一個同步對象。所以為了操作性更好,所以很多時候選擇了集合而不是數(shù)組。(3)

7、Ilist 接口(高級的數(shù)據(jù)結(jié)構(gòu),不是高級的物理法。結(jié)構(gòu)),表示可按照索引單獨的對象的非泛型集合(索引器)。代表一個列表,增加了很多的方Add、 clear、 contains(包含) 、copyto、 GetEnumerator、 Indexof、 Insert 、Remove Remove at 。屬性:count Item 索引器(看起來很像數(shù)組),比數(shù)組要靈活,而且還有集合的機動性。ArryList 的使用大小一開始是 4 個 但是這個僅僅是內(nèi)部的一個成員。當超過了 4 個的時候,容量那就是變成 8 個,但是是以 2 的倍數(shù)放的,但是會帶來性能的損失。就是先集合在數(shù)組在集合再數(shù)組地運轉(zhuǎn)

8、,數(shù)據(jù)結(jié)構(gòu)越高級,效率會降低,但是功能越來越強悍。那么怎么去解決這個的問題呢?MS 還是定義了好幾個構(gòu)造函數(shù)了,里面根據(jù)參數(shù)的不同,可以實現(xiàn)出不同的 arrylist,它內(nèi)部是一個在集合與數(shù)組的相互的切換,所以要優(yōu)化程序的話還是要好好了解內(nèi)部 運行與執(zhí)行的機制。內(nèi)部成員是 object 的類,所以可以是任意的類型,要是要添加屬于自己的類型的話我建議還是重寫一下 tostring 的方法。但是老師的這個例子 froeach 都是取出的是 object 類型的 所以 list 中最好還是要放同種類型的東西。存什么就拿出什么強制類型轉(zhuǎn)換,.net 是一個強類型的語言,也就是說每一個變量所存的數(shù)據(jù)都是

9、有類型的。強類型的語言就是預(yù)先檢查錯誤,保證程序的安全運行。那么就是遵循萬物皆有類。因為 class 的存在,時候微軟就推出 object 的基類對象。那么可以創(chuàng)造出屬于自己的類型。但是游客繼承多態(tài),那么在實際狀況的使用的時候會變得復雜一些。所以這個這個現(xiàn)在的 object P = new();所以存進去得還是那個對象,但是存進去的時候還是轉(zhuǎn)換代 object 的基類對象。但是由于 object 的區(qū)別的抹平性,所以會有點/所以這里的 string 還是強制的類型轉(zhuǎn)換的foreach (string name in list)Console.Wriine(name);,因為拿出來的還是 obj

10、ectforeach (object obj in list) /組合/強制類型轉(zhuǎn)換cast,但是這個是錯得,是有條件的,即是類型本來就是要符合(是object,但是就不是string類型,所以還是要理解清楚,所以就是裝箱與拆箱的問題,所以類型轉(zhuǎn)換有兩個基本的特點,一個是小byte到大看關(guān)鍵點)String name=(string)obj;,另一個是類型相合,比如:就是確實不是string,啟示,看問題要Console.Wriine(name);還有一個類型轉(zhuǎn)換 引出 as 但不是強制類型轉(zhuǎn)換foreach (object obj in list) /組合/as,用于類型,如果類型不相容會返

11、回一個空,那就是什么也沒有,同常在as之后加上一個判斷,以得到轉(zhuǎn)換是否成功String name = obj as string;Console.Wriine(name);裝箱與拆箱(類的轉(zhuǎn)換的理解)其實就是為一個堆棧里的值,裝一個殼,放到的堆里面,減少內(nèi)存的占用的問題(其實也就是為了把值類型的數(shù)據(jù)放進 arrylist,而且取出來還是,這樣就為了保持數(shù)據(jù)的完整性,但是會犧牲一部分的性能,因為每一個值,都是一個對象)也就是利用了 object 來處理值(堆棧,而托管的堆是類型的內(nèi)部數(shù)據(jù)的)類型的傳遞的問題Java 采取的辦法是,再創(chuàng)建一個類,定義一個包裝的類,就是每一個值的對象就要一個包裝的類

12、的對象。C# 裝箱其實就是由系統(tǒng)幫助創(chuàng)建一個對象實例,就是直接賦值,其實數(shù)據(jù)沒用從堆棧移走。從 arrylist 取出來的都是對象;我放進去是一個值,拿出來就是對象了?到了之后,箱子就沒用了但是也不知道本來得類型,但是要是對象是對象裝箱的,那么系統(tǒng)就會知道這個被裝箱的對象的類型。就是說,知道與它的實際類型匹配的話,直接用強轉(zhuǎn)換 cast 就可以拆箱取值。字典 table 就是一個關(guān)鍵字對應(yīng)一組數(shù)據(jù)。Key 鍵 value 值,一對一對的就稱為條目。支持遍歷,其實返回是一個條目類型。本身是條目的集合,有 keys 的集合,也有 values 的集合List 可以放,但是拿得時候就悲催了,字典就是

13、根據(jù) key 來找到 values ,那么就不用數(shù)下標,可以拿到一個標識順利地拿到的對象。字典的結(jié)構(gòu)是 hash 哈希,字典其實就是為了找,通常內(nèi)部不會按 list 來存,邏輯結(jié)構(gòu)是:鏈表集合。一般的算法是穩(wěn)定算法,那么哈希的精妙在與雜湊,先創(chuàng)建一塊大得空間給你,根據(jù)你要加的數(shù)據(jù),來算出要存在哪,怎么算呢?hash 算法。不是根據(jù)存數(shù)據(jù)的位置算得,是根據(jù) key 的哈希算法算出存在哪的下標位置,下次要查詢的時候再次根據(jù)的的哈希算法算出的位置就直接獲取到需要插選的對象。就是說利用二層邏輯存在對應(yīng)的內(nèi)存單元,就是內(nèi)存與其他資料建立關(guān)聯(lián),這樣就不用去查找了,直接匹配就好了。#region 綁定到tx

14、tBianHao的調(diào)撥自動public string SelectDiaoBoZiDongBianHao(M.JXC_CangKuDiaoBo_TianJia myDiaoBonTianJia )Dictionary MyDictionary = new Dictionary();MyDictionary .Add (type,new SqlParameter (type,SqlDbType.);MyDictionary.Add(DiaoBoZiDongBianHao, new SqlParameter(ZiDongBianHao, SqlDbType.NVarChar, 150);MyDic

15、tionary type.Value =myDiaoBonTianJia .ZiDongBianHaoType1 ;MyDictionary DiaoBoZiDongBianHao.Direction=ParameterDirection .Output ;return Convert.ToString(DAL.SQLHelper.ExecuteScalar(XiTong_ShengChengZiDongBianHao, DiaoBoZiDongBianHao);#endregiondType.StoredProcedure, MyDictionary,直接上匯編來寫,那么編譯器倒不如直接用

16、hash 表,去的位置,所以這個就可以減少了很多的遍歷的時間。Hashtable 的辦法位置重復的時候如何解決?拉鏈算法,搞一個鏈表那么一個位置就可以存好幾個。GeshCode();與字典的關(guān)系 看起來一樣的,但是 hashcode 不一樣,所以在字典里面的還是不同的。所以除了 equals()還要重寫 GeshCode 的方法所以比較相等的 euqals GeshCode 還有運算符重載 3 種 方法/ 判斷兩個對象是否值相等,也就是說,是否代表同樣的含義/ Object 的默認實現(xiàn)是判斷是否同一個對象實例/ 不是同一個對象實例就不會相等public override bool Equals

17、(object obj)if (obj = null)/ 不可能return false;other = obj as if (other = null)/ 與自己不是同一種類型return false;return .Equals();/ 將會繼承 GeshCode 方法/ 為了能夠在字典中作為 Key 的時候,也可以含義相等/ 必須重寫 GeshCode 方法public overrideGeshCode()返回該字符串的哈希代碼。return .GeshCode();哈希表黑洞,修改了值之后,就很難拿回來了,特別市 key 是類型的,哈希表黑洞,就是修改了以為類對象為 key 的條目的那

18、個類對象里面的值,那么本身哈希表的 value 不變,但是哈希表的 key 會變成新的修改也只能是對象找出是根據(jù) key,而是先照到原來的,在修改里面的 value還有一種叫做 set,但是本身還是一個集,lsit 是有序的,可以重復的;set 是就是數(shù)學上講的集合,就是由就行,不可以重復一樣的數(shù)據(jù)借助與字典來搞一個模擬出一個 set數(shù)獨的原理,就是把數(shù)據(jù)用數(shù)字表示的解決方案的問題,對象的建模(領(lǐng)域?qū)ο螅┮簿褪窍瘸鲱}在 解題的問題。 就是先定義首先是因為是有序的問題 所以我還是覺得用 po小關(guān)聯(lián)集合常見的接口都歸納一般1、 public class MyLinkedListEnumerator: System.Collections.Ienumerator 迭代器接口 current當前object 、movenext 下一個bool、reset 返回 void2、public class MyLinkedList4: System.Collections.Ienumerable 支持迭代接口 ublic System.Collections.IEnumeratetEnumerator() 返回的是一個接口 關(guān)聯(lián)foreach3、System.Collections.Icollection 集合接口 cou

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論