C#中泛型類和擴(kuò)展方法如何使用
我們經(jīng)常通過(guò)泛型構(gòu)造函數(shù)創(chuàng)建泛型實(shí)例,也常調(diào)用實(shí)例的擴(kuò)展方法。以下的代碼在項(xiàng)目中隨處可見(jiàn):
static void Main(string[] args)
{
var strs = new List<string> {"hello","world"};
var result = strs.Where(s => s.StartsWith("h"));
foreach (var item in result)
{
Console.WriteLine(item);
}
Console.ReadKey();
}以上,
- 通過(guò)泛型集合List<T>的構(gòu)造函數(shù)創(chuàng)建了實(shí)例,內(nèi)部是如何實(shí)現(xiàn)的呢?
- 對(duì)實(shí)例變量strs采用Where方法,我們發(fā)現(xiàn)Where也足夠”聰明”,因?yàn)樗轻槍?duì)IEnumerable集合類型的擴(kuò)展方法。
.NET內(nèi)部到底是如何實(shí)現(xiàn)的呢?不妨臨摹一下~~
創(chuàng)建一個(gè)類型泛型。
public class MyCute<T>
{
public MyCute(T t)
{
GetCute = t;
}
public T GetCute { get; set; }
}在客戶端這樣調(diào)用:
static void Main(string[] args)
{
var cuteInt = new MyCute<int>(10);
var cuteStr = new MyCute<string>("hello");
Console.WriteLine(cuteInt.GetCute);
Console.WriteLine(cuteStr.GetCute);
Console.ReadKey();
}以上,或許得到的啟示是:如果想通過(guò)構(gòu)造函數(shù)創(chuàng)建泛型實(shí)例,需要定義一個(gè)泛型類,一個(gè)泛型類型的屬性,一個(gè)把泛型類型作為參數(shù)的構(gòu)造方法。
現(xiàn)在想對(duì)泛型實(shí)例cuteInt和cuteStr的屬性GetCute使用擴(kuò)展方法,如何做呢?
cuteInt的屬性GetCute是int類型,cuteStr的屬性GetCute是string類型,兩者的共同基類是object,那就針對(duì)object類型寫(xiě)一個(gè)擴(kuò)展方法。
public static class MyHelper
{
public static string GetStr(this object obj)
{
return obj.ToString() + "--added string";
}
}客戶端變成這樣:
static void Main(string[] args)
{
var cuteInt = new MyCute<int>(10);
var cuteStr = new MyCute<string>("hello");
Console.WriteLine(cuteInt.GetCute.GetStr());
Console.WriteLine(cuteStr.GetCute.GetStr());
Console.ReadKey();
}總結(jié):
- 如果針對(duì)不同類型的操作邏輯是一樣的,就可以抽象出一個(gè)泛型類。泛型類和普通類沒(méi)有本質(zhì)的區(qū)別,只不過(guò)在類名稱后面多了一個(gè)占位符、或者叫類型參數(shù),泛型類的構(gòu)造函數(shù)參數(shù)是類型參數(shù),泛型類的屬性類型也是類型參數(shù)。
- 如果針對(duì)不同類型實(shí)例的操作邏輯是一樣的,就可以針對(duì)不同實(shí)例類型的共同父類或接口寫(xiě)一個(gè)擴(kuò)展方法。
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
C#自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)實(shí)現(xiàn)代碼
C#下創(chuàng)建數(shù)據(jù)庫(kù)的代碼2008-03-03
C#使用第三方組件實(shí)現(xiàn)動(dòng)態(tài)解析和求值字符串表達(dá)式
這篇文章主要介紹了C#如何使用第三方組件(LambdaParser、DynamicExpresso、Z.Expressions)實(shí)現(xiàn)動(dòng)態(tài)解析和求值字符串表達(dá)式,感興趣的小伙伴可以跟隨小編一起了解一下2022-06-06
常用.NET工具(包括.NET可再發(fā)行包2.0)下載
常用.NET工具(包括.NET可再發(fā)行包2.0)下載...2007-03-03
C#自定義RSA加密解密及RSA簽名和驗(yàn)證類實(shí)例
這篇文章主要介紹了C#自定義RSA加密解密及RSA簽名和驗(yàn)證類,實(shí)例分析了C#實(shí)現(xiàn)RSA加密解密及RSA簽名和驗(yàn)證的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03

