委托:
委托是一个类,它定义了方法的类型,可以将一个方法作为另一个方法的参数动态的传递,避免了程序中使用大量的if…else…语句,也使得程序具有很好的扩展性。
using System;
using System.Collections.Generic;
using System.Text;
namespace Delegate {
class Program
{
//定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
//注意此方法,它接受一个GreetingDelegate类型的方法作为参数
private static void GreetPeople(string name, GreetingDelegate MakeGreeting)
{
MakeGreeting(name);
}
static void Main2(string[] args)
{
GreetPeople("gzh", EnglishGreeting);
GreetPeople("高正浩", ChineseGreeting);
Console.ReadKey();
}
}
}
输出如下:
Morning, gzh
早上好, 高正浩
事件:
事件内部是用委托实现的,是一种特殊的委托,事件内部有一个带event关键字的委托,在类的内部,不管声明public或者protected,他都是private;在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同
namespace Delegate {
public class GreetingManager
{
//定义委托,它定义了可以代表的方法的类型
public delegate void GreetingDelegate(string name);
//这一次我们在这里声明一个事件
public event GreetingDelegate MakeGreet;
public void GreetPeople(string name)
{
MakeGreet(name);
}
}
class Program
{
private static void EnglishGreeting(string name)
{
Console.WriteLine("Morning, " + name);
}
private static void ChineseGreeting(string name)
{
Console.WriteLine("早上好, " + name);
}
static void Main(string[] args)
{
GreetingManager gm = new GreetingManager();
gm.MakeGreet += EnglishGreeting;
gm.MakeGreet += ChineseGreeting;
gm.GreetPeople("gzh");
}
}
}
输出如下:
Morning, gzh
早上好,gzh
参考大牛的博客:https://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html