C 基礎 泛型委託

2022-01-20 22:20:27 字數 1512 閱讀 5776

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

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

view plaincopy to clipboardprint?

public

delegate

void

eventhandler(

object

sender, eventargs e);  

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

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

view plaincopy to clipboardprint?

[serializable]   

public

delegate

void

eventhandler(

object

sender, teventargs e) 

where

teventargs: eventargs;  

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

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

view plaincopy to clipboardprint?

class

inteventargs : system.eventargs   

public

inteventargs()    

public

inteventargs(

intvalue)    

}   

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定義,如下 public delegate v...

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...