泛型函式
例如我要寫一個數字自加的函式,一般會這樣寫
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泛型函式
- 在Golang中使用泛型reduce函式 - gosamplesGolang泛型函式
- C 語言實現泛型 swap 函式泛型函式
- 泛型類、泛型方法及泛型應用泛型
- 【java】【泛型】泛型geneticJava泛型
- 泛型類和泛型方法泛型
- 【C++ 泛型程式設計01:模板】函式模板與類别範本C++泛型程式設計函式
- 泛型--泛型萬用字元和泛型的上下限泛型字元
- js中實現單分派泛函式JS函式
- Go 泛型之泛型約束Go泛型
- TypeScript 泛型介面和泛型類TypeScript泛型
- TypeScript 函式型別TypeScript函式型別
- 泛型泛型
- 你知道 Python裡的「單分派泛函式」?Python函式
- oracle 10g函式大全–日期型函式Oracle 10g函式
- 泛型最佳實踐:Go泛型設計者教你如何用泛型泛型Go
- 使用 Go 泛型的函數語言程式設計Go泛型函數程式設計
- 第 8 節:函式-函式型別與作用域函式型別
- 函式引數 引數定義函式型別函式型別
- 型別 VS 泛型型別泛型
- TypeScript 泛型型別TypeScript泛型型別
- c++primer——第十章泛型演算法所提到的函式總結C++泛型演算法函式
- 泛型類、泛型方法、型別萬用字元的使用泛型型別字元
- 泛型viewmodle泛型View
- Java泛型Java泛型
- Go 泛型Go泛型
- 泛型(Generic)泛型
- 泛型(一)泛型
- 泛型(三)泛型
- 泛型(二)泛型
- 泛型(四)泛型
- 泛型(五)泛型
- 【譯】在非泛型類中建立泛型方法泛型
- 泛型型別(.NET 指南)泛型型別
- 虛擬函式與多型函式多型
- PostgreSQL:字元——型別及函式SQL字元型別函式
- 胡說-JavaScript函式型別JavaScript函式型別
- Go 官方出品泛型教程:如何開始使用泛型Go泛型