委托,通熟易懂的举个例子:妈妈让小新去买东西
一 首先是C#语法
public delegate void BuyThingEventHandler();
delegate是关键字
EventHandler是一个声明委托的微软C#的命名标准
二 定义小新类
/// <summary>
/// 小新类
/// </summary>
private class CraYon
{
public static void BuyThing()
{
Console.WriteLine("妈妈,东西买好了!");
}
}
三 主方法
internal class Program
{
public delegate void BuyThingEventHandler();
private static void Main(string[] args)
{
BuyThingEventHandler myDelegate = new BuyThingEventHandler(CraYon.BuyThing);
myDelegate();
Console.ReadKey();
}
}
BuyThingEventHandler myDelegate = new BuyThingEventHandler(CraYon.BuyThing);这个是委托声明方法。
注:委托的参数和返回值类型,都要和具体委托的方法一致:
public delegate void BuyThingEventHandler();
public static void BuyThing(){
Console.WriteLine("妈妈,东西买好了!");
}
四 委托链
简单描述为,妈妈让小新去买完东西后,还让他带小白去散步。
using System;
namespace test1
{
internal class Program
{
public delegate void BuyThingEventHandler();
private static void Main(string[] args)
{
//委托
BuyThingEventHandler myDelegate = new BuyThingEventHandler(CraYon.BuyThing);
myDelegate += CraYon.WalkDog;
myDelegate();
Console.ReadKey();
}
}
/// <summary>
/// 小新类
/// </summary>
public class CraYon
{
public static void BuyThing()
{
Console.WriteLine("妈妈,东西买好了!");
}
public static void WalkDog(){
Console.WriteLine("妈妈,小狗散完步了,收集的大便给你!");
}
}
}
其实我们只是在程序中加了
myDelegate += CraYon.WalkDog;
这个委托就相当于做了两件事,先买东西再带小白散步。
五 委托与事件
事件是个实在的对象,而委托是个类型。比方说一个button按钮,你可以给它注册和注销click事件,但委托不行,委托是掉别人的方法,它无法注册自己和注销自己。