C 基礎 泛型委託

2022-03-11 12:35:54 字數 1173 閱讀 9982

泛型委託是委託的一種特殊形式,感覺看上去比較怪異,其實在使用的時候跟委託差不多,不過泛型委託更具有型別通用性。

就拿c#裡最常見的委託eventhandler打比方。在.net 2.0以前,也就是泛型出現以前,普通的事件處理函式都由eventhandler定義,如下:

public delegate void eventhandler(object sender, eventargs e);  

eventhandler指代了這樣一類函式,這些函式沒有返回值,並且有兩個引數,第乙個引數是object型別,而第二個引數是eventargs型別。

而.net 2.0及其以後的版本,由於泛型的引入,所以一些內建(built-in)的類、介面、委託都有了各自的泛型版本。eventhandler也不例外,它有了自己的泛型版本:eventhandler,它的定義如下:

[serializable]   

public delegate void eventhandler(object sender, teventargs e) where teventargs: eventargs;  

您應該可以發現,第二個引數的型別由eventargs變成了teventargs,而teventargs具體是什麼,則由呼叫方決定。假設inteventargs和stringeventargs都繼承於system.eventargs,那麼:

其實eventhandler和eventhandler是兩個完全不同的委託,它們所指代的函式都分別有著不同的簽名形式。請參見下面的示例:

class inteventargs : system.eventargs   

public inteventargs()    

public inteventargs(int value)    

}   

class stringeventargs : system.eventargs   

public stringeventargs()    

public stringeventargs(string value)    

}   

class program   

static void printstring(object sender, stringeventargs e)   

static void main(string args)   

}   

C 基礎 泛型委託

泛型委託是委託的一種特殊形式,感覺看上去比較怪異,其實在使用的時候跟委託差不多,不過泛型委託更具有型別通用性。就拿c 裡最常見的委託eventhandler打比方。在.net 2.0以前,也就是泛型出現以前,普通的事件處理函式都由eventhandler定義,如下 view plaincopy to...

C 委託基礎3 泛型委託

首先給大家分享乙個巨牛巨牛的人工智慧教程,是我無意中發現的。教程不僅零基礎,通俗易懂,而且非常風趣幽默,還時不時有內涵段子,像看 一樣,哈哈 我正在學習中,覺得太牛了,所以分享給大家!點這裡可以跳轉到教程 泛型委託 class program string addstring string s1,s...

C 委託基礎3 泛型委託

泛型委託 class program string addstring string s1,string s2 static void main string args intdel 100,200 mygenericdelegate string stringdel stringdel p.add...