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)、委託泛型、多播委託C#泛型
- C# 委託(delegate)、泛型委託和Lambda表示式C#泛型
- C#規範整理·泛型委託事件C#泛型事件
- C#基礎委託回顧C#
- 五分鐘重溫C#委託,匿名方法,Lambda,泛型委託,表示式樹C#泛型
- C#深入學習:泛型修飾符in,out、逆變委託型別和協變委託型別C#泛型型別
- 詳解C#基礎之委託非同步C#非同步
- Kotlin基礎 — 委託Kotlin
- 五分鐘重溫委託,匿名方法,Lambda,泛型委託,表示式樹泛型
- C#基礎系列:委託和設計模式(2)C#設計模式
- C#委託C#
- C# 事件委託C#事件
- C#委託(delegate)C#
- C# 委託事件C#事件
- C#基礎:泛型的理解和使用C#泛型
- C#基礎系列:委託實現簡單設計模式(1)C#設計模式
- C#的委託案例C#
- C#委託與事件C#事件
- C#委託理解(1)C#
- c# 委託測試C#
- C#再識委託C#
- C# 事件 vs 委託C#事件
- C#中的委託C#
- C# - 委託與事件C#事件
- c# 委託和事件C#事件
- java 基礎 泛型Java泛型
- Java基礎-泛型Java泛型
- JavaSE基礎:泛型Java泛型
- TypeScript基礎--泛型TypeScript泛型
- 【Java基礎】泛型Java泛型
- C#學習筆記--資料結構、泛型、委託事件等進階知識點C#筆記資料結構泛型事件
- 基礎拾遺---委託,匿名函式,lambda函式
- 瞭解下C# 委託(Delegate)C#
- C# 之委託與事件C#事件
- 什麼是委託(C#)C#
- .Net委託型別解析型別
- Go泛型基礎使用Go泛型
- java-基礎-泛型Java泛型