C#中泛型類和擴展方法如何使用
我們經(jīng)常通過泛型構(gòu)造函數(shù)創(chuàng)建泛型實例,也常調(diào)用實例的擴展方法。以下的代碼在項目中隨處可見:
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(); }
以上,
- 通過泛型集合List<T>的構(gòu)造函數(shù)創(chuàng)建了實例,內(nèi)部是如何實現(xiàn)的呢?
- 對實例變量strs采用Where方法,我們發(fā)現(xiàn)Where也足夠”聰明”,因為它是針對IEnumerable集合類型的擴展方法。
.NET內(nèi)部到底是如何實現(xiàn)的呢?不妨臨摹一下~~
創(chuàng)建一個類型泛型。
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(); }
以上,或許得到的啟示是:如果想通過構(gòu)造函數(shù)創(chuàng)建泛型實例,需要定義一個泛型類,一個泛型類型的屬性,一個把泛型類型作為參數(shù)的構(gòu)造方法。
現(xiàn)在想對泛型實例cuteInt和cuteStr的屬性GetCute使用擴展方法,如何做呢?
cuteInt的屬性GetCute是int類型,cuteStr的屬性GetCute是string類型,兩者的共同基類是object,那就針對object類型寫一個擴展方法。
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é):
- 如果針對不同類型的操作邏輯是一樣的,就可以抽象出一個泛型類。泛型類和普通類沒有本質(zhì)的區(qū)別,只不過在類名稱后面多了一個占位符、或者叫類型參數(shù),泛型類的構(gòu)造函數(shù)參數(shù)是類型參數(shù),泛型類的屬性類型也是類型參數(shù)。
- 如果針對不同類型實例的操作邏輯是一樣的,就可以針對不同實例類型的共同父類或接口寫一個擴展方法。
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
C#實現(xiàn)獲取文本文件的編碼的一個類(區(qū)分GB2312和UTF8)
這篇文章主要介紹了C#實現(xiàn)獲取文本文件的編碼一個類,本文給出類可以自動區(qū)分GB2312和UTF8,并同時給出了使用方法,需要的朋友可以參考下2014-09-09WinForm中DataGridView添加,刪除,修改操作具體方法
這篇文章介紹了WinForm中DataGridView添加,刪除,修改操作具體方法,有需要的朋友可以參考一下2013-10-10c# 數(shù)據(jù)庫的 sql 參數(shù)封裝類的編寫
c# 數(shù)據(jù)庫的 sql 參數(shù)封裝類的編寫...2007-12-12完成OSS.Http底層HttpClient重構(gòu)封裝 支持標準庫
OSS.Http項目對于.Net Standard標準庫的支持已經(jīng)遷移完畢,OSS開源系列兩個最底層的類庫已經(jīng)具備跨運行時支持的能力。本篇文章主要包含 1. HttpClient的介紹,2. 重構(gòu)的思路, 3. 容易遇到的問題。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02C#中的應(yīng)用程序接口介紹及實現(xiàn),密封類與密封方法
今天小編就為大家分享一篇關(guān)于C#中的應(yīng)用程序接口介紹及實現(xiàn),密封類與密封方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10