委托的構成必須滿足的4個條件:
委托包裝的方法需要滿足以下條件
示例一:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppDelegate { class Program { //1、使用delegate關鍵字來定義一個委托類型 delegate void MyDelegate(int parm1, int parm2); static void Main(string[] args) { //2、聲明委托變量d MyDelegate d; //3、實例化委托類型,傳遞的方法也可以為靜態方法,這裡傳遞的是實例方法 d = new MyDelegate(new Program().Add); //4、委托類型作為參數傳遞給另一個方法 MyMethod(d); Console.Read(); } //該方法的定義必須與委托定義相同,即返回類型void,兩個int類型的參數 void Add(int parm1,int parm2) { int sum = parm1 + parm2; Console.WriteLine("兩個數的和為:"+sum); } //方法的參數是委托類型 private static void MyMethod(MyDelegate mydelegate) { //5、在方法中調用委托 //mydelegate.Invoke(1, 2); mydelegate.Invoke(1, 2); } } }
示例二:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleAppDelegateGreeting { class Program { static void Main(string[] args) { Program p = new Program(); p.Greeting("蒼井空",p.ChineseGreeting); p.Greeting("Tommy Li", p.EnglishGreeting); Console.Read(); } //定義委托類型 public delegate void GreetingDelegate(string name); //有了委托之後可以像下面這樣實現打招呼方法 public void Greeting(string name,GreetingDelegate callback) { //調用委托 callback(name); } //美國人打招呼方法 public void EnglishGreeting(string name) { Console.WriteLine("Hello, " + name); } //中國人打招呼方法 public void ChineseGreeting(string name) { Console.WriteLine("你好, " + name); } } }
總結: