Welcome

首页 / 软件开发 / .NET编程技术 / Emit学习-进阶篇-定义事件

Emit学习-进阶篇-定义事件2011-09-03 博客园 yingql之前在研究如何用Emit为动态类添加事件,本来以为会非常简单,但是却碰到 了许多的问题,有些问题在之前的答疑篇中已经提到了,并予以了解决,虽然有 些地方自己也不是很明白,但毕竟还是解决了,最后比较我写的IL代码,和系统 自动生成的,总有一些地方无法做到一致。特别是在为事件添加add和remove方法 时,碰到了许多问题,下面我将针对这些问题进行讲解。按照惯例,先给出要实 现的类的C#代码,方便反编译后对照着进行IL代码的书写,代码如下:

Publisher

public class Publisher{    private bool isStart = false;    private Random random = new Random(DateTime.Now.Millisecond);    public void Start()    {        if (!isStart)        {            isStart = true;            GenerateRand();        }    }    public void Stop()    {        isStart = false;    }    private void GenerateRand()    {        while (isStart)        {            OnRandGenerated(random.Next(10000));            Thread.Sleep(1000);        }    }    #region Event    public event EventHandler<RandGeneratedEventArgs> RandGenerated;    protected virtual void OnRandGenerated(int rand)    {        RaiseRandGeneratedEvent(rand);    }    private void RaiseRandGeneratedEvent(int rand)    {        EventHandler<RandGeneratedEventArgs> temp = RandGenerated;        if (temp != null)        {            RandGeneratedEventArgs arg = new RandGeneratedEventArgs(rand);            temp(this, arg);        }    }    #endregion      }