C 基礎之泛型委託例項教程

2022-09-26 08:24:09 字數 1345 閱讀 9252

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

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

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

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

而.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,那麼:

1.eventhandler指代這樣一類函式:這些函式沒有返回值,有兩個引數,第乙個引數是object型別,第二個引數是inteventargs型別

2.eventhandler指代這樣一類函式:這些函式沒有返回值,有兩個引數,第乙個引數是object型別,第二個引數是stringeventargs型別

其實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 ar程式設計客棧gs)

}

泛型委託例項

先來看一下典型的window控制項的事件處理方式,舉兩個例子,乙個button的mouseclick事件,乙個linklabel的linkclicked事件 this button1.mouseclick new system.windows.forms.mouseeventhandler this...

C 基礎 泛型委託

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

C 基礎 泛型委託

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