泛型函式
例如我要寫一個數字自加的函式,一般會這樣寫
int f(int id){return id++;}
但是在使用時往往會因為傳遞的值的型別可能不是id而被迫多寫一些過載
long f(long id){return id++;}
用於解決在傳遞值時的型別不同,當然,你也可以只使用一個函式,但是在函式傳遞進來時就要進行型別的轉換,例如,只有引數為int 的函式,但是我的值是字串:
string id="5411"; if(f(int.Parse(id))){ //... }
這樣先進行強制轉換再傳入,所以在從前我們都是用Object來進行引數的傳遞,這樣就可以免去在外寫多次型別轉換的麻煩。
long f(object id){return int.Parse(id.ToString())++;}
但是這個不是萬靈的,有時可能要通過複雜的型別轉換來實現效果。而且返回值寫要寫為一個固定 的型別,那麼有沒有所有型別都是動態的呢。
所以 人們發明了泛型,泛型的好處就在於,只要定義一個函式/類,就可以應多種型別的傳遞。
我們只要將剛剛函式中的int都換為T再在函式後加一個
T f(T id){return id++};
也就是說f
int a=1,b; b=f<int>(a);
這時T為int,也就是可以看做將這個泛型函式所有的T都替換為int,所以是
int f(int id){return id++;}
當然,這一切都是.net自己完成的。很智慧吧,同理,以下用法也是可以的:
long x=0; f<long>(x); char t='a'; t=f<char>(t);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-465890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java函式泛型List引數,操作泛型元素Java函式泛型
- Java泛型建構函式Java泛型函式
- C 語言實現泛型 swap 函式泛型函式
- 在Golang中使用泛型reduce函式 - gosamplesGolang泛型函式
- C# 泛型 new()建構函式約束C#泛型函式
- [CUJ]泛型程式設計--轉移建構函式 (轉)泛型程式設計函式
- 泛型鏈式堆疊泛型
- Java泛型知識點:泛型類、泛型介面和泛型方法Java泛型
- 泛型類、泛型方法及泛型應用泛型
- 泛型類和泛型方法泛型
- 【java】【泛型】泛型geneticJava泛型
- java泛型之泛型方法。Java泛型
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- 函式型介面函式
- TypeScript 泛型介面和泛型類TypeScript泛型
- Go 泛型之泛型約束Go泛型
- java泛型之泛型陣列。Java泛型陣列
- 【C++ 泛型程式設計01:模板】函式模板與類别範本C++泛型程式設計函式
- js中實現單分派泛函式JS函式
- 泛型泛型
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- TypeScript 函式型別TypeScript函式型別
- jQuery使用最廣泛的javascript函式庫jQueryJavaScript函式
- 型別 VS 泛型型別泛型
- TypeScript 泛型型別TypeScript泛型型別
- oracle 10g函式大全–日期型函式Oracle 10g函式
- oracle 10g函式大全--字元型函式Oracle 10g函式字元
- oracle 10g函式大全--日期型函式Oracle 10g函式
- 泛型(一)泛型
- 泛型(三)泛型
- 泛型(二)泛型
- 泛型(四)泛型
- 泛型(五)泛型
- Go 泛型Go泛型
- va泛型泛型
- Java 泛型Java泛型
- Java泛型Java泛型
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元