C# 委託與事件

來源:互聯網
上載者:User

標籤:delegate   c#   執行個體   namespace   

委託委託建立的是一條方法鏈條,可以讓一個對象依次執行鏈條上的方法。可以簡化代碼,提高效率。聲明
public delegate int Delegate(int i);//聲明委託

對委託註冊方法匹配規則:方法額傳回型別必須和委託的傳回型別相同。方法的參數必須和委託的方法參數相同,參數名稱可以不同。
public void F1(int i,int j);//nopublic int F2(int i);//nopublic int F3(int m,int n);//yes

執行個體化委託委託是一個類,所以需要執行個體化。
namespace Test{delegate int Delegate(int i);class Program{public int F1(int i){return i;}static void Main(string[] args){Program p=new Program();Delegate d1=new Delegate(p.F1);//建立執行個體}}}



委託的方法列表將多個方法綁定到同一個委託變數。,當調用委託變數時,可以一次調用所有綁定的方法。
namespace Test{delegate int Delegate(int i);class Program<pre name="code" class="csharp">namespace Test{public delegate int Delegate(int i);public class Program{public static int F1(int i){return i;}public int F2(int j){return j;}static void Main(string[] args){Program p=new Program();Delegate d1=new Delegate(p.F1);Delegate d2=new Delegate(p.F2);Delegate d3=d1+d2;//給委託註冊方法int i3=d3(10);}}}

調用委託委託是一個方法鏈條,調用委託也就是調用了委託執行個體包含的所有方法。
namespace Test{public delegate void Delegate(int i);public class Program{public static void F1(int i){Console.WriteLine(i.ToString());}public static void F2(int i){Cosnole.WriteLine(i.ToString());}static void Main(string[[] args){Delegate d1=new Delegate(Program.F1);Delegate d2=new Delegate(Program.F2);Delegate d3=d1+d2;d1(10);//調用d1執行個體d2(200);//調用d2執行個體d3(201);//調用d3執行個體}}}

事件事件是一種特殊的委託聲明事件的委託
public delegate void EventHandler(object sender,EventArgs e);

聲明事件本身
public event EventHandler Print;//申明事件Print

註冊事件&移除事件
namespace Test{public delegate void EventHandler(object sender,EventArgs e)class Program{public event EventHandler Print;public void F1(object sender,EventArgs e){Console.WriteLine("F1");}public void F2(object sender,EventArgs e){Console.WriteLine("F2");}static void Main(string[] args){Program p=new Program();p.Print+=new EventHandler(p.F1);//給事件註冊一個方法p.Print+=new EventHandler(p.F2);if(p.Print!=null){p.Print(null,null);}Console.Writeline();p.Print-=new EventHandler(p.F1);//從事件中移除方法F1;if(p.Print!=null){p.Print(null,null);}Console.ReadLine();}}}

呼叫事件
namespace Test{public delegate void EventHandler(object sender,EventArgs e);class Program{public event EventHandler Print;public void F1(object sender,eventargs e){Console.WriteLine("F1");}static void Main(string[] args){Program p=new Program();p.Print+=new EventHandler(p.F1);if(p.Print!=null){p.Print(null,null);//呼叫事件}Console.ReadLine();}}}



C# 委託與事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.