標籤: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# 委託與事件