泛型大家用的很廣泛,也很重要。涉及有泛型方法、接口至於具體怎麼使用百度下隨便寫幾個Demo 實踐下自然就懂。
說一些實用的:
一、System.Collections.Concurrent
這個是線程安全的集合,裏面包含了多種線程安全的集合類,爲什麼要用這個,因爲我們用普通的List,Queue、Dictionary 在多線程下都會出現問題因此用這個線程安全的集合類就可以解決此類問題,他們內部也是通過實現鎖的機制,只不過是框架幫我們實現的。
二、具有泛型參數的類型分爲2種:
開放類型:顯然就是開放的誰都可以進來 反應在泛型中就是沒有具體明確T的類型 eg:List<T>
封閉類型:指明瞭泛型參數的T類型。List<string>
類型實參:
依據泛型類型參數分爲
不變量:參數類型明確指定了沒有別的修飾符,就是常用的常設計的泛型參數
逆變量:參數可以從一個類變爲它的派生類。就是基類出現的地方用子類。用in 標 記 你可以理解爲 父類創建的基業,內部子類逆反上位了。就發生了逆變。
協變量:參數從類轉爲他的某個基類 用out 標記 就是子類出現的地方可以用基 類,你可以理解爲就是子類出去征戰然後協助父類上位,就是協變
記不住沒關係,不要緊,一般設計用不到,來張圖解釋下
數字1處所示:參數類型我們看好是泛型的 T和 TResult 分別用 in 和out 參數修飾,那麼意思就是這個
參數 T是逆變的(可以由子類代替) 用 in修飾
參數 TResult 是斜邊的用 out修飾 可以用基類代替。
數字2所示:
定義了該委託 fn1 ,所需參數是 Object(逆變的可以用子類代替 string是Objcect的子類)
還有ArgumentException是協變的(可以用基類代替)Exception是所有異常基類
因此圖3處可以成立。
三、約束
約束至少可以一個,也可以麼有、主要約束一個。次要約束多個。
其他知識點個人覺得實戰性不高。不貪多,要貪實用性、基礎性。