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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、ivate Node header; private Node current;/ 當(dāng)然要與的 MyLinkedList 有緊密的關(guān)系/ 要求構(gòu)造函數(shù)中得到列表中的 header 指向的節(jié)點(diǎn)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(在當(dāng)前值之前,必須 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 命名空間包含接口和類,這些接口和類定義各種對(duì)象(如列表、隊(duì)列、位數(shù)組、哈希表和字典)的集合。接口的實(shí)例,盲人摸象。大柱子,扇子,繩子,肚子,棍子,從不同的角度去認(rèn)識(shí)和理解它,從基類派生,不可改變。從很多角度去看問題。通過接口來了解集合的誕生。對(duì)大家要有的幫助。(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))只讀的 獲取個(gè)數(shù)數(shù)組(物理的結(jié)構(gòu))的是length多線程 一個(gè)線程沒問題, 動(dòng)態(tài),但是數(shù)值卻是不行的。一半在操作,一半在遍歷,如何解決這些問題?就是線程同步,就需要一個(gè)同步對(duì)象。所以為了操作性更好,所以很多時(shí)候選擇了集合而不是數(shù)組。(3)

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

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

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

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

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

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

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

14、tBianHao的調(diào)撥自動(dòng)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 表,去的位置,所以這個(gè)就可以減少了很多的遍歷的時(shí)間。Hashtable 的辦法位置重復(fù)的時(shí)候如何解決?拉鏈算法,搞一個(gè)鏈表那么一個(gè)位置就可以存好幾個(gè)。GeshCode();與字典的關(guān)系 看起來一樣的,但是 hashcode 不一樣,所以在字典里面的還是不同的。所以除了 equals()還要重寫 GeshCode 的方法所以比較相等的 euqals GeshCode 還有運(yùn)算符重載 3 種 方法/ 判斷兩個(gè)對(duì)象是否值相等,也就是說,是否代表同樣的含義/ Object 的默認(rèn)實(shí)現(xiàn)是判斷是否同一個(gè)對(duì)象實(shí)例/ 不是同一個(gè)對(duì)象實(shí)例就不會(huì)相等public override bool Equals

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論