日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

【c#基础】泛型

發布時間:2023/12/2 C# 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【c#基础】泛型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1:減少代碼的選項可以是用Object類,也可以使用泛型

但是Object類進行類型傳遞不是類型安全的。泛型類使用泛型類型保證了類型安全。

泛型類?泛型方法?泛型接口、結構、委托

泛型優點:

1:性能

裝箱和拆箱很容易使用,但性能損失比較大。

泛型的話在編譯的時候就會動態生成我們定義他的類型,這樣就不用進行裝箱和拆箱。

var list=new List<int>();

上面這一句的話編譯的時候就會編譯成對應的int類型了,所以在運行的時候不用在進行裝拆箱操作了。

2:類型安全

就是說你定義了一個List<int>()?這邊只能添加int類型的數據不允許你添加其他類型,向ArrayList()?就可以?同時添加int string等不同類型。這樣在調用的時候如果定義的是int類型,但是取到的是string?類型這樣運行就會報錯。

3:二進制代碼的重用

泛型允許更好的重用二進制代碼。泛型類可以定義一次,并且可以用去多不同的類型實例化。

4:代碼擴展

泛型類的定義會放在程序集中,所以用特定淚I型那個實例化泛型類不會在IL代碼中復制這些?類。

在JIT編譯器把泛型類編譯為本地代碼時,會給每個類型創建一個新類,引用類型共享同一個本地類的所有相同實現代碼,因為引用類型在實例化的泛型類中只需要4個字節內存地址(32位系統),就可以引用一個類型。值類型包含在實例化的泛型類的內存中,同時因為每個值類型對內存要求都不同,所以要為每個值類型實例化一個新類。

?泛型命名要點:

當要給一個泛型賦默認值的時候可以使用default(T);?當是引用類型的話就會默認值為null,值類型的話默認值就是0.

協變和抗變

協變和抗變是指對參數和返回值的類型進行轉換。

參數類型協變:

例如:就是如果定義一個基類Shape和子類Rectangle,有一個方法以Sharp作為參數

但是作為shape基類的子類Rectangle可以作為參數傳遞給這個方法。

?

方法返回類型是抗變的:

當方法返回一個Shape,不能把它賦于Rectangle,因為Shape不一定總是Retangle.反過來是可行的。?

原先.Net4之前泛型是不支持協變和抗變的,之后就在支持了,但是使用方式有點不一樣

泛型類型用out關鍵字標注,泛型接口就是協變的。這意味著返回類型只能是T.

接口IIndex于類型T是協變的,并從一個自讀索引器中返回這個類型

泛型接口的抗變:

用In關鍵字標識

?泛型結構

與類一樣,結構也可以是泛型,只是沒有繼承特性。

泛型結構Nullable<T>.?通常就是可空符號 ??和空合并運算符 ??

?

泛型方法也可以重載

?泛型方法所調用的方法是在編譯期間就已經定義了,而不是運行期間。

轉載于:https://www.cnblogs.com/SignX/p/11029356.html

總結

以上是生活随笔為你收集整理的【c#基础】泛型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。