C#_委託Delegate

來源:互聯網
上載者:User

標籤:數列   line   派生   定義   列表   ons   ogr   函數返回   class   

委託 

C# 中的委託(Delegate)類似於 C 或 C++ 中函數的指標。委託(Delegate) 是存有對某個方法的引用的一種參考型別變數。引用可在運行時被改變。

委託(Delegate)特別用於實現事件和回調方法。所有的委託(Delegate)都派生自 System.Delegate 類。

 

聲明委託(Delegate)

委託聲明決定了可由該委託引用的方法。委託可指向一個與其具有相同標籤的方法。

 

1 delegate 函數傳回型別 委託名 (<方法參數列表>);

 

執行個體化委託(Delegate)

委派物件必須使用 new 關鍵字來建立,且與一個特定的方法有關。當建立委託時,傳遞到 new 語句的參數就像方法調用一樣書寫,但是不帶有參數。

 

1 委託類型 執行個體名 = new 委託類型 (<註冊方法>);

通過委託執行個體來調用方法,執行委託執行個體就等同於執行註冊方法。

 

匿名函數初始化委託

為初始化委託而專門定義方法較為麻煩,通常調用委託執行個體初始化時賦值的方法,而不直接調用方法本身。

 格式如下:

1 delegate 委託(函數)傳回型別 委託類型(函數參數列表);2 3 委託類型 委託執行個體= new 委託類型(delegate(<函數參數列表:類型 形參名,類型 形參名...>)4 {5     //函數體6 });

或者省去new關鍵字。

1 delegate 委託(函數)傳回型別 委託類型(函數參數列表);2 3 委託類型 委託執行個體= delegate(<函數參數列表:類型 形參名,類型 形參名...>)4 {5     //函數體6 };
 委託的多播(Multicasting of a Delegate)

委派物件可使用 "+" 運算子進行合并。一個合并委託調用它所合并的兩個委託。只有相同類型的委託可被合并。"-" 運算子可用於從合并的委託中移除組件委託。

使用委託的這個有用的特點,您可以建立一個委託被調用時要調用的方法的調用列表。這被稱為委託的 多播(multicasting),也叫組播。

利用多播可以將委託中的函數類似資料一樣擴充或消減。

 

 1 namespace _9_delegate_2_20170801 2 { 3     class TestDelegate 4     { 5         public static void PrintfA() 6         { 7             Console.WriteLine("PrintfA !"); 8         } 9 10         public static void PrintfB()11         {12             Console.WriteLine("PrintfB !");13         }14     }15     delegate void Mydelegate();16 17     class Program18     {19         static void Main(string[] args)20         {21             // 建立委託執行個體22             Mydelegate d;23             Mydelegate da = new Mydelegate(TestDelegate.PrintfA);24             Mydelegate db = new Mydelegate(TestDelegate.PrintfB);25             d = da;26             d += db;27             // 調用多播28             Console.WriteLine("調用委託執行個體d ==da+db:");29             d();30             d -= da;31             Console.WriteLine("調用委託執行個體d ==db:");32             d();33         }34     }35 }
委託多播例子
委託的好處

1、操作函數更加靈活,就像使用變數一樣方便,具有動態性,可避免程式中大量的使用分支語句。

2、與C++,C中的函數指標相比,委託是物件導向、型別安全、可靠的受控對象。委託能保證指向一個安全有效不會越界的儲存函數的地址。

3、與C++,C中的函數指標相比,指標只能指向靜態函數,委託可以引用靜態函數也可以引用非靜態成員函數。

當程式必須調用一個方法來執行某個操作,但編譯無法確定是什麼方法時,就可以使用委託。

 

C#_委託Delegate

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.