學會總結,最有效的學習方式

2021-08-30 08:53:55 字數 2666 閱讀 6244

使用泛型給**帶來的5點好處:1、可以做大限度的重用**、保護型別的安全以及提高效能。

2、可以建立集合類。

3、可以建立自己的泛型介面、泛型方法、泛型類、泛型事件和泛型委託。

4、可以對泛型類進行約束,以訪問特定資料型別的方法。

5、關於泛型資料型別中使用的型別的資訊,可在執行時通過反射獲取。

六種型別的約束:

t:結構                       型別引數必須是值型別。可以指定除nullable以外的任何值型別。

t:類                           型別引數必須是引用型別,包括任何類、介面、委託或資料型別。

t:new()                  型別引數必須具有無引數的公共建構函式。當與其他約束一起使用時,new()約束必須最後制定。

t:《基類名》                 型別引數必須是指定的基類或派生自指定的基類。

t:《介面名稱》              型別引數必須是指定的介面或實現指定的介面。可以指定多個介面約束。約束介面也可以是泛型的。

t:u                              為 t 提供的型別引數必須是為 u 提供的引數或派生自為 u 提供的引數。這稱為裸型別約束。

例子:1.介面約束。

例如,可以宣告乙個泛型類 mygenericclass,這樣,型別引數 t 就可以實現 icomparable介面:

public class mygenericclasswhere t:icomparable
2.基類約束。

指出某個型別必須將指定的類作為基類(或者就是該類本身),才能用作該泛型型別的型別引數。這樣的約束一經使用,就必須出現在該型別引數的所有其他約束之前。

class myclassywhere t : class

where u : struct

3.建構函式約束。

以使用 new 運算子建立型別引數的例項;但型別引數為此必須受建構函式約束 new() 的約束。new() 約束可以讓編譯器知道:提供的任何型別引數都必須具有可訪問的無引數(或缺省)建構函式。new() 約束出現在 where 子句的最後。

public class mygenericclass where t: icomparable, new()

4.對於多個型別引數,每個型別引數都使用乙個 where 子句。

inte***ce myi 

class dictionarywhere tkey: icomparable, ienumerable

where tval: myi

}

5.還可以將約束附加到泛型方法的型別引數。

public bool mymethod(t t) where t : imyinte***ce
6. 裸型別約束

用作約束的泛型型別引數稱為裸型別約束。當具有自己的型別引數的成員函式需要將該引數約束為包含型別的型別引數時,裸型別約束很有用。

class list

}

為什麼要有約束呢?

當乙個泛型引數沒有任何約束時,它可以進行的操作和運算是非常有限的,因為不能對實參做任何型別上的保證,這時候就需要用到泛型的約束。泛型的主要約束和次要約束都是指泛型的實參必須滿足一定的規範。c#編譯器在編譯的過程中可以根據約束來檢查所有泛型型別的實參並確保其滿足約束條件。

乙個泛型引數可以至多擁有乙個主要約束,主要約束可以是乙個引用型別、class或者struct。如果指定乙個引用型別,則實參必須是該型別或者該型別派生型別。class規定實參必須是乙個引用型別。struct規定了引數必須是乙個之類新。以下**是泛型引數主要約束的示例。

using system;

namespace test

}//主要約束限定t繼承自exception型別

public class classt1where t : exception

public override string tostring()

}//主要約束限定t是引用型別

public class classt2where t : class

}//主要約束限定t是值型別

public class classt3where t : struct

}}

以上**,泛型引數具備了主要約束後,就能夠在型別中對其進行一定的操作,否則任何演算法就只能基於乙個system.object型別的成員。

可以說,主要約束是實參型別的限定,而相對的次要約束,則是指實參實現的介面的限定。對於乙個泛型型別,可以有0至無限的次要約束,次要約束規定了引數必須實現所有次要約束中規定的介面。次要約束的語法和主要約束基本一致,區別僅在於提供的不是乙個引用型別而是乙個或多個介面。

ps:同時擁有主要約束和次要約束的泛型引數,表示實參必須同時滿足主要約束和次要約束。

這篇文章是自己在面試過程中發現自己的不足,從其他大神**copy過來,以備自己學習並希望能給有和我一樣的小白一點幫助。如果對原作者有冒犯,希望告知。

《這樣學習最有效》 筆記1

1.故事聯想 2.流程聯想 起床,刷牙,早飯 3.聲音聯想 4.概念聯想 很自然的,運動 健康 5.順序聯想 很自然的 6.旋律聯想 歌詞會比較好記 7.口訣聯想 俄德法,美日加意英 8.押運聯想 9.視覺聯想 影象聯想 強,因為其用到了我們右腦的記憶存檔 目的是激發右腦的記憶與創造,視覺聯想首先要...

學習程式設計最快捷最有效的方法

當然,一開始是看書 呵呵,不要扔雞蛋 不看書你怎麼知道 int main void 是什麼意思?不看書你怎麼知道語句後面要加 不過呢我說的看書不是說死啃書,每段都仔細看過來 還記得標題嘛?最便捷最有效 看書是為了了解基本的語法規則,就如我上面所說的 懂了hello,how do you do才能和外...

晚上學習如何安排時間最有效?

晚上學習如何安排時間最有效?1 明確今天晚上學習的目標,學到什麼程度才可以睡覺。學習之後,一定要用筆在紙列個清單出來,這樣更便於安排時間,不致於手忙腳亂,在睡覺時充滿負罪感,覺得自己今天沒有完成目標就睡了。2 在學習之前不要上網 看電視 電影 玩遊戲 打 和閒聊。我以前總是習慣在學習之前上網到處逛逛...