国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#基礎之泛型委托實例教程

2020-01-24 02:26:28
字體:
來源:轉載
供稿:網友

本文實例講述了C#中泛型委托的用法,并以示例形式較為詳細的進行了用法分析。分享給大家供大家參考之用。具體如下:

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

就拿C#里最常見的委托EventHandler打比方。在.NET 2.0以前,也就是泛型出現以前,普通的事件處理函數都由EventHandler定義,如下:

public delegate void EventHandler(object sender, EventArgs e);

EventHandler指代了這樣一類函數,這些函數沒有返回值,并且有兩個參數,第一個參數是object類型,而第二個參數是EventArgs類型。

而.NET 2.0及其以后的版本,由于泛型的引入,所以一些內建(Built-in)的類、接口、委托都有了各自的泛型版本。EventHandler也不例外,它有了自己的泛型版本:EventHandler<T>,它的定義如下:

[Serializable]  public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs: EventArgs;

您應該可以發現,第二個參數的類型由EventArgs變成了TEventArgs,而TEventArgs具體是什么,則由調用方決定。假設IntEventArgs和StringEventArgs都繼承于System.EventArgs,那么:

1.EventHandler<IntEventArgs>指代這樣一類函數:這些函數沒有返回值,有兩個參數,第一個參數是object類型,第二個參數是IntEventArgs類型

2.EventHandler<StringEventArgs>指代這樣一類函數:這些函數沒有返回值,有兩個參數,第一個參數是object類型,第二個參數是StringEventArgs類型

其實EventHandler<IntEventArgs>和EventHandler<StringEventArgs>是兩個完全不同的委托,它們所指代的函數都分別有著不同的簽名形式。請參見下面的示例:

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<IntEventArgs> ihandler = new EventHandler<IntEventArgs>(PrintInt);      EventHandler<StringEventArgs> shandler = new EventHandler<StringEventArgs>(PrintString);       ihandler(null, new IntEventArgs(100));      shandler(null, new StringEventArgs("Hello World"));    }  }  

有關泛型的具體特性與其在面向對象思想中的應用,本站有相關文章做了詳細解讀,感興趣的讀者可以查閱參考一下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松阳县| 南康市| 汉寿县| 开封市| 定安县| 海口市| 三门峡市| 建瓯市| 柯坪县| 锡林浩特市| 辉南县| 商丘市| 临漳县| 藁城市| 三河市| 通江县| 大厂| 安远县| 麻栗坡县| 嵊泗县| 青神县| 通河县| 阿鲁科尔沁旗| 雅安市| 五峰| 商都县| 海丰县| 漾濞| 伊金霍洛旗| 城固县| 桂东县| 丽江市| 虎林市| 化德县| 安宁市| 盘山县| 晋城| 平乡县| 运城市| 孟村| 天水市|