在说C#委托时,往往指的是委托类型而不是一个委托类型的对象(最好是区分委托类型和委托实例),在说起事件的时候,可以说是封装过了的委托类型对象吧。
事件不是一种类型,它是封装过了的委托类型的对象。
如下代码,如果事件是一种类型,那下面代码中有事件类型的对象吗?
为什么是
HandEvent += Method;
而不是
HandEvent handevent += Method;
因为事件本身就是一个对象或者说是某个类中的一个字段或者属性。
using System;
namespace TestCSharp
{
public delegate void InvokeMethond(string str);
public delegate void Handler(string str);
class Program
{
static event Handler HandEvent;
static void Main(string[] args)
{
InvokeMethond invokeMethond = Method;
invokeMethond += delegate (string str1) { Console.WriteLine(" 匿名方法: {0}", str1); };
invokeMethond("委托");
HandEvent += Method;
HandEvent("事件");
}
public static void Method( string str )
{
Console.WriteLine(" 字符串: {0}", str);
}
}
}
我们将事件HandEvent放入Main函数内,结果报错,事件是属于某个类的成员,至于是字段还是属性,应该是属性吧。
http://www.tracefact.net/tech/009.html: