我读了一些事件教程,但是没有得到像这样的简单代码的好处..方法应该以相同的方式使用:
class Bulb
{ public delegate void handler();
public event handler Glowing;
...
Glowing+=SomeMethod;
private void TurnOn
{
Glowing();
}
private void SomeMethod
{
}
}
答案 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();
)。这是假设修改器被设置为允许这种访问。
关键是它允许通知事件,而不是要求每次想要发生操作时手动调用特定方法。