event 关键字只是一个说明的作用,可让你的事件在设计环境下的属性框中看到你定义的事件,
如果不写,只是不能在属性中直接设计,要通过代码写了,但是事件还是可以在对象中看到的,
至于你说的在编译器中做了什么,好象没法知道,它都是封装的可能是象vc中一样定义了一个函数指针吧,

解决方案 »

  1.   

    在C#中,一切都是按照面向对象的方式来处理的,委托也不例外,当C#编译器在检查到委托定义的时候,它实际上是定义了一个委托类,类名即为委托名,同时在此类中还定义了一个回调方法,此方法的签名跟委托的签名相同。当事件产生的时候,就回调用委托类中的回调方法。......具体细节请参考<<Microsoft .NET框架程序设计>>
      

  2.   

    delegate实际上是一个经过包装的安全的函数指针。.net的事件处理,我的理解是,在事件被激发的时候,系统会查找事件中已添加的与该事件关联的函数,然后转到函数的执行体部分。
    举例如下:class MyClass
    {
        public event EventHandler DataArrived;
        // 如果事件DataArrived的函数地址表非空,则将this指针和参数e传给DataArrived函数地址表中的函数
        private void OnDataArrived(EventArgs e)
        {
            if(this.DataArrived != null)
            {
                this.DataArrived(this, e);
            }
        }    public Receive()
        {
            // 接收数据
            // 全部数据到达,激发事件
            this.OnDataArrived(EventArgs.Empty);
        }
    }class MainClass
    {
        static void Main()
        {
            MyClass myClass = new MyClass();
            // 这一句实际上是将OnDataArrived的函数的首地址添加到DataArrived事件的函数地址表中
            myClass.DataArrived += new EventHandler(OnDataArrived);
            myClass.Receive();
        }    static void OnDataArrived(Object sender, EventArgs e)
        {
            Console.WriteLine("Data Arrived!");
        }
    }
    个人意见,希望大家共同讨论。