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

C# 为什么要在方法足够的地方使用事件?,c#,events,methods,C#,Events,Methods,我读了一些事件教程,只是不知道这样简单的代码有什么好处。方法应该以同样的方式使用: class Bulb { public delegate void handler(); public event handler Glowing; ... Glowing+=SomeMethod; private void TurnOn { Glowing(); } private void SomeMethod { } } 其思想是,一个可以容纳三个不同灯泡的

我读了一些事件教程,只是不知道这样简单的代码有什么好处。方法应该以同样的方式使用:

class Bulb

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

  private void SomeMethod
  {
  }

}

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

因此,好处不在于simply类,而在于任何类/对象都将持有/使用Bulb类的实例


希望这有一定的意义:)

简单地说,事件允许其他使用您的代码的人在事件发生时(当灯泡发光时)执行他们想要的自定义实现

仅仅调用您的方法不会告诉任何人发生了什么事情

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

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


例如,当使用一个类时,您不知道某个项何时被添加到该类中(如果在某个点上其他代码这样做了),但在一个类中,您会在添加或删除项时收到通知


事件是由对象发送的一条消息,用以发出动作发生的信号。该操作可能由用户交互(如鼠标单击)引起,也可能由其他程序逻辑触发


当您有一个类依赖项需要知道或得到关于有状态更改的通知时,方法上的事件变得很方便:

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类识别有什么东西打开了灯泡。在许多情况下,它将通过灯中的某些动作(点击、按钮等)实现。但在某些情况下,它可能是一个外部类,直接调用公共灯泡属性而不使用灯泡本身(例如
if(PowerCompany.BillsPaid)Lamp.BulbInTheLamp.TurnedOn();
)。这都是假设修饰符设置为允许这种访问

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