共找到4條詞條名為逆變的結果 展開

逆變

C#中的委託逆變

逆變,因為委託方法簽名參數比方法參數更具體,因此可以在傳遞給處理程序方法時對它們進行隱式轉換。這樣,當創建可由大量類使用的更加通用的委託方法時,使用逆變就更為簡單了。

目錄

正文


當委託方法簽名具有一個或多個參數,並且這些參數的類型派生自方法參數的類型時,就稱為逆變委託方法。因為委託方法簽名參數比方法參數更具體,因此可以在傳遞給處理程序方法時對它們進行隱式轉換。這樣,當創建可由大量類使用的更加通用的委託方法時,使用逆變就更為簡單了。
例如,如果方法具有兩個參數,則委託的第一個參數必須繼承於方法的第一個參數的類,且第二個參數必須繼承於第二個參數的類。(委託類型的參數比委託方法的參數更具體) 。
C# 代碼示例
System.DateTime lastActivity;
public Form1()
{
InitializeComponent();
lastActivity = new System.DateTime();
this.textBox1.KeyDown += this.MultiHandler; //works with KeyEventArgs
this.button1.MouseClick += this.MultiHandler; //works with MouseEventArgs
}
// Event hander for any event with an EventArgs or
// derived class in the second parameter
private void MultiHandler(object sender, System.EventArgs e)
{
lastActivity = System.DateTime.Now;
}