为什么在方法足够的地方使用事件?

时间:2011-02-23 15:44:04

标签: c# events methods

我读了一些事件教程,但是没有得到像这样的简单代码的好处..方法应该以相同的方式使用:

class Bulb

{ public delegate void handler();
  public event handler Glowing;
 ...
  Glowing+=SomeMethod;
  private void TurnOn
  {
    Glowing();
  }

  private void SomeMethod
  {
  }

}

3 个答案:

答案 0 :(得分:4)

Simply Events允许其他人使用您的代码在事件发生时(当Bulb发光时)执行他们想要的一些自定义实现。

简单地调用您的方法不会告诉任何人发生了某些事情。

事件是任何事件驱动编程的基本元素

如果您的程序不需要告知事件,则不需要实现此类功能。但是,拥有这样的功能有好处。


例如,当使用List类时,你不知道什么时候添加了一个项目(如果在某些时候某些其他代码那样做),但是在ObservableCollection中你得到通知< / strong>添加或删除项目时。


  

事件是对象发送的消息,用于指示操作的发生。该操作可能是由用户交互引起的,例如鼠标单击,或者可能由某些其他程序逻辑触发。

答案 1 :(得分:2)

这个想法是,一个可以容纳三个不同灯泡的不同类可以通过事件(如果它实现了一个处理程序)通知灯已经打开并且正在发光。

因此,好处不在简单的类中,而在于类/对象将持有/使用Bulb类的实例。

希望有道理:)

答案 2 :(得分:2)

当你有一个需要知道或被告知状态变化的类依赖时,方法上的事件会变得很方便:

public class Lamp
{
    Bulb inThelamp = new Bulb();
    inTheLamp.Glowing += myLampMethod;

    // If these arguments have been defined for this event that is
    public void myLampMethod(object sender, EventArgs e) 
    {
        // Code to react to the light suddenly being on
    }
}

这允许Lamp类识别某些东西已打开灯泡。在许多情况下,它将通过灯泡中的某些动作(点击,推动旋钮等)。但在某些情况下,它可能是一个外部类,直接调用公共Bulb属性而不使用Lamp本身(例如if(PowerCompany.BillsPaid) Lamp.BulbInTheLamp.TurnedOn();)。这是假设修改器被设置为允许这种访问。

关键是它允许通知事件,而不是要求每次想要发生操作时手动调用特定方法。