区别1:
委托是类型,如同class,enum,struct等
事件用来修饰委托变量,起到限定作用,例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 委托和事件
{
class Test
{
//声明委托的方法签名
public delegate void delegateFun(string msg);
//声明事件
public event delegateFun mEvent;
public void Talk(string msg)
{
Console.WriteLine("这是一个:" + msg);
}
//调用事件的方法
public void InvokeEvent(string msg)
{
if (mEvent != null)
{
mEvent(msg);
}
}
}
class Program
{
static void Main(string[] args)
{
Test t = new Test();
//委托是方法类型可以通过类名.出来
Test.delegateFun fun = t.Talk;
//事件用来修饰委托变量不是类型,所以只能用对象调用
t.mEvent += t.Talk;
Console.ReadKey();
}
}
}
区别2:
委托在类的内部或者外部都能赋值和调用
事件只能在类的内部赋值,外部只能通过+=,-=操作,且只能在类的内部调用,例如:

从上图可以看出,当我们试图在Test类的外部给事件赋值或者在外部调用事件时,将会报错,由于委托内外都可以调用就不赘述了
总结:
委托是方法类型,事件可以理解成一个被限制的委托,具体表现为,无法在外部赋值,只能通过+=,-=操作,无法在外部调用,有点类似私有的字段
3918

被折叠的 条评论
为什么被折叠?



