C#事件与委托之间的关系
转载博客园-使用中,委托常用来表达回调,事件表达外发的接口。
-委托和事件支持静态方法和成员方法, delegate(void * pthis, f_ptr), 支持静态返方法时, pthis传null.支持成员方法时, pthis传被通知的对象.
-委托对象里的三个重要字段是, pthis, f_ptr, pnext, 也就是被通知对象引用, 函数指针/地址, 委托链表的下一个委托节点.
1. 怎样定义委托类型?
delegate + function signature // delegate相当于class关键字, function name相当于定义的委托类型.
delegate void Mydelegate();
2. 怎样定义委托实例? Mydelegate my;(这个是无返回值的简单委托定义);
3. 怎样定义事件?
先定义委托类型 delegate void ActionHandler(object sender, EventArgs args);其实这个参数要不要都可以。
再定义事件实例event ActionHandler Tick;
记忆的方法:
delegate关键字类比于class关键字, 定义的是一种委托类型,然后再创建委托示例.
创建委托实例时, 用event关键字来修饰就变成了创建一个事件. 也就是事件是一种特殊的委托.
class MyClass
{
public delegate void CompletedEventHandler();
public event CompletedEventHandler WorkCompleted;
public CompletedEventHandler WorkCompletedDelegate;
public void Fire()
{
if (this.WorkCompleted != null)
{
this.WorkCompleted();
}
if (this.WorkCompletedDelegate != null)
{
this.WorkCompletedDelegate();
}
}
}
class Program
{
static void TestEvent()
{
Console.WriteLine("test event");
}
static void TestDelegate()
{
Console.WriteLine("test delegate");
}
static void Main(string[] args)
{
MyClass myObject = new MyClass();
myObject.WorkCompletedDelegate += TestDelegate;
myObject.WorkCompleted += TestEvent;
}
页:
[1]