泛型委託是委託的一種特殊形式,感覺看上去比較怪異,其實在使用的時候跟委託差不多,不過泛型委託更具有型別通用性。
就拿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...