.NET 事件

            事件(event)构建在委托的基础上,他是C#的另一个重要功能。从本质上说,事件是一种信号机制,它在发生某种活动是自动地发出通知。

            事件处理程序通过委托来表示。

           event 关键字用于声明事件,这些事情可以作为类的成员。

           最常用的事件声明方式为:  event  event-delegate  event-name; 

            其中,event-delegate是支持事件的委托名称,event-name 是声明的具体事件对象的名称。

           

    delegate void MyEventHandler();
    class MyEvent
    {
        public event MyEventHandler SomeEvent;

        public void OnSomeEvent()
        {
            if (SomeEvent != null)
                SomeEvent();
        }
    }

    class EventDemo
    {
        static void Handler()
        {
            Console.WriteLine("The handler is great!");
        }
        static void Main(string[] args)
        {
            MyEvent myEvent = new MyEvent();
            myEvent.SomeEvent += Handler;
            myEvent.OnSomeEvent();

            Console.Read();
        }
    }

事件的其他特性

         事件可以在接口中指定,实现接口的类必须提供事件。

         事件可以被指定为抽象类型(abstract)。派生类必须实现事件。但是,基于存取器的事件不可用是抽象类型。 

         事件可以被指定为封闭类型(sealed)。

         事件可以是虚时间(virtual),这表示它在派生类中可以被重写。

         

对事件使用匿名方法和拉姆达表达式

        

 delegate void MyEventHandler();
    delegate void ParamsEvent(string msg);
    class MyEvent
    {
        public event MyEventHandler SomeEvent;
        public event ParamsEvent ParamEvent;

        public void OnSomeEvent()
        {
            if (SomeEvent != null)
                SomeEvent();
        }

        public void OnParamEvent(string s)
        {
            if (ParamEvent != null)
                ParamEvent(s);
        }
    }
    class EventDemo
    {
        static void Main(string[] args)
        {
            MyEvent myEvent = new MyEvent();
             
            //无参
            myEvent.SomeEvent += delegate() { Console.WriteLine("‘匿名’事件"); };
            myEvent.SomeEvent += () => { Console.WriteLine("‘拉姆达表达式’事件"); };
            //有参
            myEvent.ParamEvent += delegate(string a) { Console.WriteLine("{0}事件", a); };  //"‘匿名’"
            myEvent.ParamEvent += a => { Console.WriteLine("{0}事件", a); }; //‘拉姆达表达式’

            myEvent.OnSomeEvent();
            myEvent.OnParamEvent("First,Second");

            Console.Read();
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值