C# 事件详解

时间:2022-05-25 07:36:22

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 ); } }