泛型函式

iDotNetSpace發表於2008-09-27

例如我要寫一個數字自加的函式,一般會這樣寫

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就是定義了函式f是一個泛型,它的泛型替換字元為T,我們可以用以下方法使用它:

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章