委托的構成必須滿足的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);
}
}
}
總結: