码迷,mamicode.com
首页 > Windows程序 > 详细

C# 事件详解

时间:2018-01-06 12:03:04      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:mys   命名   是什么   ble   ted   详解   hand   rgs   tar   

1.事件的本质是什么

  答:事件是委托的包装器,就像属性是字段的包装器一样

2.为什么有了委托还有有事件

  委托可以被访问就可以被执行,事件则只能在类的内部执行

3.事件要怎么声明

  a.明一个委托  

//委托用于事件,约定以EventHandle结束 ,参数一般要有一个事件拥有者,和一个事件参数 ,这三者是同级的关系,所以三个类访问级别要一致
//为什么说三者呢,因为委托虽然写法比较怪,但也是一个类
public delegate void DelegateNameEventHandle(IHaveEvent obj,EventArgs e);

  b.声明委托的参数类

//事件参数类要记得承继EventArgs这个系统的基类
public class DelegateNameEvenArgs:EventArgs
{
   public int p1 { get; set; }
}

  c.声明拥有些事件的类

public class IHaveEvent
{
    //简化的声明
    public event DelegateNameEventHandle MySimpleEvent;

    //完整的声明
    private DelegateNameEventHandle delegateNameEventHandle;
    public event DelegateNameEventHandle MyFullEvent
    {
        add {
            delegateNameEventHandle += value;
        }
        remove {
            delegateNameEventHandle -= value;
        }
    }

}

4. .net 框架已经有一个 默认的 事件委托了  一般直接用就可以 不必自己声明

    //
    // 摘要:
    //     表示将用于处理不具有事件数据的事件的方法。
    //
    // 参数:
    //   sender:
    //     事件源。
    //
    //   e:
    //     不包含事件数据的对象。
    [ComVisible(true)]
    public delegate void EventHandler(object sender, EventArgs e);

5.既然事件只能由拥有者来执行,一般是如何操作的呢

//1 执行事件方法的访问级别不要让外部可以访问到,设成protected 此类的派生类也能访问   2 约定执行事件的方法命名on+事件名
protected void onEvnt(EventArgs e)
{
    if (delegateNameEventHandle != null)
    {
        delegateNameEventHandle(this, e );
    }
}

 

C# 事件详解

标签:mys   命名   是什么   ble   ted   详解   hand   rgs   tar   

原文地址:https://www.cnblogs.com/nocanstillbb/p/8210640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!