1. 程式人生 > >淺析c#中的泛型

淺析c#中的泛型

泛型是我們經常在程式設計中遇到的一種未確定的型別,在面嚮物件語言比如c#中,為了更好的滿足面向物件程式設計的要求,我們會經常用到泛型來解決一些問題。 我們最常用的就是List集合,List<T>我們常用來表示某種型別的集合,因為型別的可變性,所以就有了泛型的需要。 比如List<int>就表示int型別的集合,當我們不確定我們需要的是什麼型別的集合時,就可以用泛型來定義,我們可以看出,泛型更像是充當了一個佔位符的作用,將即將要填寫的型別的位置先佔住,然後當需要具體使用時,就將具體的類寫上去取代佔位符。 泛型的應用範圍非常廣泛,多數情況下,我們都會在面向物件程式設計中用到,尤其是涉及到程式的擴充套件性、程式的複用性,需要對一些類進行進一步的封裝,這時泛型就起到了非常靈活的作用。 舉個栗子: classNormalRoom     { public string name; public Normal serve;     } class LowRoom     { public string name; public Low serve;     } class HighRoom     { public string name; public High serve;     } 比如我們有一個房間類,房間有一個屬性是服務,那麼服務可以是正常的服務,也可以是低質量的服務,或者高質量的服務,如果我們現在就要正常的服務,那麼OK,這個類沒有任何毛病,但是萬一有一天,我的需求發生了變化,我不要普通服務,我就要高質量的服務,那麼我們就需要再重新修改之前的類,將裡面的服務Normal進行修改,萬一哪一天我右有需求變化,我不要普通,不要高階,要豪華級,那我們必須再次編寫Room類,將裡面的Normal再次修改;我們會發現,這種簡單的類的定義是很難滿足多變的使用者需求,而且真正實戰中類的複雜程度會非常大,我們不可能採用一一修改裡面的引數型別來滿足我們變化著的需求,這時,我們便將這個型別暫定,不指定具體的,就在那裡佔個位置,你說普通服務,就將普通服務的類代替掉所佔的位置。所以我們就引入了泛型,引入後我們的程式碼可以進行一下優化 class
Room<T>     { public string name; public T serve;     } 如果我們需要普通服務的房間,就只用例項普通的型別的房間,如果有其他需求也可以直接例項化: class Program     { static void Main(string[] args)         { //普通房間 Room<Normal> roomN = new Room<Normal>(); //高階房間 Room<High> roomH = new Room<High
>(); //低階房間 Room<Low> roomL = new Room<Low>();         }     } 這樣我們便可以非常輕鬆的進行房間質量的擴充套件,如果以後要新增豪華級房間,只需要自定義一個豪華級別類,然後對Room<Rich>進行例項化便可以達到目的。 同樣的思路,我們還可以定義泛型方法: public void Serve<T>(T args)         { //傳入對應的泛型引數         } 如果T是int,我們就需要傳入int型別的引數,如果是string,便需要傳入string型別引數 同理,我們還可以定義泛型委託: public
delegate T MyDel<T>(T args); 使用方法都如出一轍,我們最常用的就是List<T>,Dictionary<T,R>,Queue<T>等等,在以後複雜的專案中我們會經常使用,所以泛型一定要學好,為以後面向物件程式設計提供更好的思路和方法!