成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 泛型委托學習經驗淺析

開發 后端
C# 泛型委托學習中我們會遇到一些概念的問題,什么是C# 委托?是什么C# 泛型委托?那么本文就向你詳細介紹他們的概念及應用實例。

C# 泛型委托學習之前首先來看看什么是C# 委托,C# 委托是一種引用方法的類型。一旦為委托分配了方法,C# 委托將與該方法具有完全相同的行為。委托方法的使用可以像其他任何方法一樣,具有參數和返回值,如下面的示例所示:與委托的簽名(由返回類型和參數組成)匹配的任何方法都可以分配給該委托。這樣就可以通過編程方式來更改方法調用,還可以向現有類中插入新代碼。只要知道委托的簽名,便可以分配自己的委托方法。

C# 泛型委托代碼

  1. public delegate int PerformCalculation(int x, int y); 

將方法作為參數進行引用的能力使委托成為定義回調方法的理想選擇。例如,可以向排序算法傳遞對比較兩個對象的方法的引用。分離比較代碼使得可以采用更通用的方式編寫算法。

C# 委托具有以下特點:

◆C# 委托類似于 C++ 函數指針,但它是類型安全的。

◆C# 委托允許將方法作為參數進行傳遞。

◆C# 委托可用于定義回調方法。

◆C# 委托可以鏈接在一起;例如,可以對一個事件調用多個方法。

◆方法不需要與委托簽名精確匹配。

◆C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數傳遞,以代替單獨定義的方法。

C# 泛型委托的理解及應用:

C# 委托可以定義自己的類型參數。引用泛型委托的代碼可以指定類型參數以創建已關閉的構造類型,就像實例化泛型類或調用泛型方法一樣,如下例所示:

C# 泛型委托代碼

  1. public delegate void Del﹤T﹥(T item);  
  2. public static void Notify(int i) { }  
  3.  
  4. Del﹤int﹥ m1 = new Del﹤int﹥(Notify); 

C# 2.0 版具有稱為方法組轉換的新功能,此功能適用于具體委托類型和泛型委托類型,并使您可以使用如下簡化的語法寫入上一行:

C# 泛型委托代碼

  1. Del﹤int﹥ m2 = Notify; 

在泛型類內部定義的委托使用泛型類類型參數的方式可以與類方法所使用的方式相同。

C# 泛型委托代碼

  1. class Stack﹤T﹥  
  2. {  
  3.     T[] items;  
  4.     int index;  
  5.  
  6.     public delegate void StackDelegate(T[] items);  

引用委托的代碼必須指定包含類的類型變量,如下所示:

C# 泛型委托代碼

  1. private static void DoWork(float[] items) { }  
  2.  
  3. public static void TestStack()  
  4. {  
  5.     Stack﹤float﹥ s = new Stack﹤float﹥();  
  6.     Stack﹤float﹥.StackDelegate d = DoWork;  

根據典型設計模式定義事件時,泛型委托尤其有用,因為發送方參數可以為強類型,不再需要強制轉換成 Object,或反向強制轉換。

C# 泛型委托代碼

  1. delegate void StackEventHandler﹤T, U﹥(T sender, U eventArgs);  
  2.  
  3. class Stack﹤T﹥  
  4. {  
  5.     public class StackEventArgs : System.EventArgs { }  
  6.     public event StackEventHandler﹤Stack﹤T﹥,   
  7. StackEventArgs﹥ stackEvent;  
  8.  
  9.     protected virtual void OnStackChanged(StackEventArgs a)  
  10.     {  
  11.         stackEvent(this, a);  
  12.     }  
  13. }  
  14.  
  15. class SampleClass  
  16. {  
  17.     public void HandleStackChange﹤T﹥(Stack﹤T﹥ stack,  
  18.  Stack﹤T﹥.StackEventArgs args) { }  
  19. }  
  20.  
  21. public static void Test()  
  22. {  
  23.     Stack﹤double﹥ s = new Stack﹤double﹥();  
  24.     SampleClass o = new SampleClass();  
  25.     s.stackEvent += o.HandleStackChange;  

C# 泛型委托的相關內容就向你介紹到這里,希望對你了解和學習C# 泛型委托有所幫助。

【編輯推薦】

  1. C# 泛型類型參數淺析
  2. C# 類型參數約束分析及應用淺析
  3. C# 泛型接口應用淺析
  4. C# 泛型方法概念及使用淺析
  5. C# 泛型數組學習小結
責任編輯:仲衡 來源: MSDN
相關推薦

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 16:39:19

C# 泛型應用

2009-08-24 17:27:05

C#泛型應用

2009-08-24 14:20:13

C# 強制類型轉換

2009-08-24 11:35:20

C# 泛型應用

2009-08-24 13:31:38

C# 泛型約束

2009-08-24 15:28:19

C# 泛型方法

2009-08-24 10:37:27

C# 泛型

2009-08-24 10:07:57

C#泛型處理

2009-08-24 17:39:21

C# 泛型集合

2009-08-24 15:38:21

C# 泛型數組

2009-08-24 16:19:42

C# 泛型方法

2009-08-24 16:01:44

C# 泛型

2009-08-24 13:41:23

C# 泛型約束

2009-08-20 18:37:52

委托C#異步委托

2009-08-21 11:24:16

C#異步調用

2009-10-09 09:07:40

C#委托和事件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本免费黄色 | 在线a视频网站 | 日本视频一区二区 | 亚洲第一av | 国产精品大全 | 精品国产乱码久久久久久蜜臀 | 亚洲欧美高清 | 日韩成人免费av | 九九亚洲| 欧美日韩精品一区二区三区四区 | 天天拍天天操 | 在线观看国产视频 | 成人伊人网 | 日本精品裸体写真集在线观看 | 欧美日韩国产在线观看 | 国产激情在线观看 | 国产欧美性成人精品午夜 | 国产一区二区三区在线视频 | 欧美黄色性生活视频 | 亚洲日本国产 | 在线观看视频中文字幕 | 久精品久久 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 青青草一区二区 | 成人免费看黄 | 艹逼网 | av在线影院| 久久久精品一区二区三区 | 欧美日韩三区 | 国产精品久久久久久亚洲调教 | 日韩av在线一区 | 91香蕉视频在线观看 | 超碰成人免费 | 97视频网站 | 久久一区二区三区四区五区 | 久在线视频 | 欧产日产国产精品视频 | 国产日韩欧美 | 精品国产乱码一区二区三区 | 一级特黄在线 | av中文字幕在线 |