官方描述:
委托(delegate)是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用。
委托也叫代理,把事情交给别人去办理。
声明委托模板
<访问修饰符> delegate 返回类型 委托名称(变量类型 变量名);
C#中如果将一个方法委托给一个对象,这个对象就可以全权代理这个方法的执行。
举例:
//声明委托
public delegate void Del(string message);
//创建委托的一个方法
public static void DelegateMethod(string message)
{
Console.WriteLine(message);
}
// 实例化委托
Del handler = DelegateMethod;
// 执行委托
handler("Hello World");
事件
事件基于委托,为委托提供了一种发布订阅机制。
事件是委托的一个实例;
事件需要在类中声明;
需要将要做的事情的方法,绑定到事件中,然后响应事件,客户就可以一起执行完成方法;
namespace ConsoleApp1
{
public class Program
{
static void Main(string[] args)
{
Incrementer incrementer = new Incrementer();//实例化
incrementer.CountedADozen += ShowSomeThing;//订阅事件
Dozens dozens = new Dozens(incrementer);
incrementer.DoEvent();//执行事件
Console.ReadLine();
}
public static void ShowSomeThing()
{
Console.WriteLine($"excute showSomeThing");
}
}
#region 事件发布
public delegate void Handler();
public class Incrementer
{
public event Handler CountedADozen;//实例化委托,就是事件吗?
public void DoEvent()
{
for (int i = 1; i < 50; i++)
{
if (i % 12 == 0 && CountedADozen != null)
{
CountedADozen.Invoke();//执行事件
}
}
}
}
#endregion
#region 订阅事件
public class Dozens
{
public Dozens(Incrementer incrementer)
{
incrementer.CountedADozen += IncrementDozenCount;
}
public void IncrementDozenCount()
{
Console.WriteLine($"Dozens");
}
}
#endregion
}