委托系列一
委托是实现回调函数的一种机制
将委托作为参数传递
class Program { // 声明委托 protected delegate void DelegateGreeting(string name); protected static void MakeGreeting(string name, DelegateGreeting delegateGreeting) { delegateGreeting(name); } protected static void ChineseGreeting(string name) { Console.WriteLine($"中文打招呼:早上好,{name}"); } protected static void EnglishGreeting(string name) { Console.WriteLine($"英文打招呼:Morning,{name}"); } static void Main(string[] args) { MakeGreeting("小明",ChineseGreeting); MakeGreeting("xiao ming", EnglishGreeting); } }
显示定义委托
class Program { // 声明委托 protected delegate void DelegateGreeting(string name); protected static void MakeGreeting(string name, DelegateGreeting delegateGreeting) { delegateGreeting(name); } protected static void ChineseGreeting(string name) { Console.WriteLine($"中文打招呼:早上好,{name}"); } protected static void EnglishGreeting(string name) { Console.WriteLine($"英文打招呼:Morning,{name}"); } static void Main(string[] args) { DelegateGreeting delegate1, delegate2; delegate1 = ChineseGreeting; delegate2 = EnglishGreeting; MakeGreeting("小明", delegate1); MakeGreeting("xiao ming", delegate2); } }
多个方法传递给一个委托
class Program
{
//定义委托
protected delegate void DelegateGreeting(string name);
protected static void EnglishGreeting(string name)
{
Console.WriteLine("Morning:"+name);
}
protected static void ChineseGreeting(string name)
{
Console.WriteLine("早上好:"+name);
}
//将委托作为参数传递
protected static void Greeting(string name, DelegateGreeting MakeGreeting)
{
MakeGreeting(name);
}
static void Main(string[] args)
{
// 将多个方法同时赋予一个委托
DelegateGreeting deletage1;
deletage1 = ChineseGreeting;
deletage1 += EnglishGreeting;
Greeting("bradley",deletage1);
Console.ReadKey();
}
}
取消委托绑定方法
class Program { //定义委托 protected delegate void DelegateGreeting(string name); protected static void EnglishGreeting(string name) { Console.WriteLine("Morning:"+name); } protected static void ChineseGreeting(string name) { Console.WriteLine("早上好:"+name); } //将委托作为参数传递 protected static void Greeting(string name, DelegateGreeting MakeGreeting) { MakeGreeting(name); } static void Main(string[] args) { DelegateGreeting deletage1 = new DelegateGreeting(ChineseGreeting); deletage1 += EnglishGreeting; Greeting("bradley",deletage1); Console.WriteLine(); deletage1 -= EnglishGreeting; Greeting("bradley", deletage1); Console.ReadKey(); } }
将委托放在类中进行调用
class Program
{
public class DelegateManage
{
public delegate void DelegateGreeting(string name);
//将委托作为参数传递
public void Greeting(string name, DelegateGreeting MakeGreeting)
{
MakeGreeting(name);
}
}
protected static void EnglishGreeting(string name)
{
Console.WriteLine("Morning:" + name);
}
protected static void ChineseGreeting(string name)
{
Console.WriteLine("早上好:" + name);
}
static void Main(string[] args)
{
DelegateManage manage = new DelegateManage();
manage.Greeting("bradley",ChineseGreeting);
manage.Greeting("bradley",EnglishGreeting);
Console.ReadKey();
}
}
将委托封装到类中,通过"+"号去连接多个委托
class Program { public delegate void DelegateGreeting(string name); public class DelegateManage { public DelegateGreeting delegate1; public void Greeting(string name, DelegateGreeting MakeGreeting) { MakeGreeting(name); } } protected static void EnglishGreeting(string name) { Console.WriteLine("Morning:" + name); } protected static void ChineseGreeting(string name) { Console.WriteLine("早上好:" + name); } static void Main(string[] args) { DelegateManage manage = new DelegateManage(); manage.delegate1 = EnglishGreeting; manage.delegate1 += ChineseGreeting; manage.Greeting("bradley", manage.delegate1); Console.ReadKey(); } }
将委托封装在类中,通过字段传递
class Program
{ public delegate void DelegateGreeting(string name); public class DelegateManage { public DelegateGreeting delegate1; public void Greeting(string name) { if (delegate1 != null) { delegate1(name); }
// 简化写法 delegate1?.Invoke(name); } } protected static void EnglishGreeting(string name) { Console.WriteLine("Morning:" + name); } protected static void ChineseGreeting(string name) { Console.WriteLine("早上好:" + name); } static void Main(string[] args) { DelegateManage manage = new DelegateManage(); manage.delegate1 = EnglishGreeting; manage.delegate1 += ChineseGreeting; manage.Greeting("bradley"); Console.ReadKey(); } }
委托还有另外一种写法如下:
DelegateGreeting delegateGreeting = new DelegateGreeting(ChineseGreeting);
manage.Greeting("bradley", delegateGreeting);

浙公网安备 33010602011771号