C#基礎:泛型委託
泛型委託是委託的一種特殊形式,感覺看上去比較怪異,其實在使用的時候跟委託差不多,不過泛型委託更具有型別通用性。
就拿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
指代這樣一類函式:這些函式沒有返回值,有兩個引數,第一個引數是object型別,第二個引數是IntEventArgs型別 EventHandler
指代這樣一類函式:這些函式沒有返回值,有兩個引數,第一個引數是object型別,第二個引數是StringEventArgs型別
其實EventHandler
view plaincopy to clipboardprint?
class IntEventArgs : System.EventArgs
{
public int IntValue { get; set; }
public IntEventArgs() { }
public IntEventArgs(int value)
{ this.IntValue = value; }
}
class StringEventArgs : System.EventArgs
{
public string StringValue { get; set; }
public StringEventArgs() { }
public StringEventArgs(string value)
{ this.StringValue = value; }
}
class Program
{
static void PrintInt(object sender, IntEventArgs e)
{
Console.WriteLine(e.IntValue);
}
static void PrintString(object sender, StringEventArgs e)
{
Console.WriteLine(e.StringValue);
}
static void Main(string[] args)
{
EventHandler
ihandler = new EventHandler
(PrintInt); EventHandler
shandler = new EventHandler
(PrintString); ihandler(null, new IntEventArgs(100));
shandler(null, new StringEventArgs("Hello World"));
}
}
有關泛型的具體特性與其在物件導向思想中的應用,將在後續與泛型相關的文章中重點闡述。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/818/viewspace-2812156/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C# 委託(delegate)、泛型委託和Lambda表示式C#泛型
- C#規範整理·泛型委託事件C#泛型事件
- C#基礎之委託,事件C#事件
- C#基礎委託回顧C#
- C#深入學習:泛型修飾符in,out、逆變委託型別和協變委託型別C#泛型型別
- Kotlin基礎 — 委託Kotlin
- C#委託C#
- c#中的委託C#
- c# 委託和事件C#事件
- C# - 委託與事件C#事件
- C#委託與事件C#事件
- C#的委託案例C#
- C#委託理解(1)C#
- Java基礎 —— 泛型Java泛型
- Java基礎-泛型Java泛型
- java 基礎 泛型Java泛型
- TypeScript基礎--泛型TypeScript泛型
- C#學習筆記--資料結構、泛型、委託事件等進階知識點C#筆記資料結構泛型事件
- 瞭解下C# 委託(Delegate)C#
- Go泛型基礎使用Go泛型
- 基礎拾遺---委託,匿名函式,lambda函式
- 詳解C#委託與事件C#事件
- C#反射的委託建立器C#反射
- 【C#】-泛型C#泛型
- C#泛型C#泛型
- C# 泛型C#泛型
- Java基礎之泛型方法Java泛型
- java基礎複習-----泛型Java泛型
- Java基礎-泛型詳解Java泛型
- 【Java反射】Java 泛型基礎Java反射泛型
- 詳解C#委託和事件(二)C#事件
- 詳解C#委託和事件(一)C#事件
- C#泛型集合C#泛型
- Java基礎之淺談泛型Java泛型
- Java基礎——深入理解泛型Java泛型
- corejava基礎知識(3)-泛型Java泛型
- Kotlin實戰 | 2 = 12 ?泛型、類委託、過載運算子綜合應用Kotlin泛型
- C#委託的幾種表現方式C#