C# 事件详解

Posted nocanstillbb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 事件详解相关的知识,希望对你有一定的参考价值。

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# 事件详解的主要内容,如果未能解决你的问题,请参考以下文章

c# winform_form属性详解以及事件详解(二)

C# 事件详解

C#入门详解(11)

C# VB6 OCX 生成的消费事件

C# 中 XBOX 控制器的事件处理程序?

C#入门详解笔记事件 泛型 委托 Lambda表达式 LINQ