我阅读了有关如何制作事件处理程序的内容,我发现所有教程和文章都用于制作委托(delegate)和事件变量。我不明白他们为什么要使用事件变量,因为我们可以只使用委托(delegate)来制作事件处理程序,就像这样的代码:
namespace EventsTest
{
public class Counter
{
public delegate void ReachedEventHandler(object sender);
public ReachedEventHandler fireEvent;
// public event ReachedEventHandler fireevent;
private int counter = 0;
public void Add(int x, int toReach)
{
counter += x;
if (counter == toReach && fireEvent != null)
fireEvent(this);
}
}
public class Test
{
public static void Main()
{
Counter x = new Counter();
x.fireEvent += new Counter.ReachedEventHandler(CounterReachedEventHandler);
x.Add(1, 1);
}
private static void CounterReachedEventHandler(object sender)
{
Console.WriteLine("Reached!");
}
}
}
这样就可以了,那么制作事件变量有什么必要呢?
谢谢!
最佳答案
event
关键字保证封装:您将无法调用或修改 fireEvent
在Counter
之外.外部唯一可用的操作是订阅和取消订阅( +=
和 -=
)。
关于您的代码的几点说明:
一般来说,你应该使用
EventHandler
委托(delegate)而不是定义你自己的等价物(ReachedEventHandler
)和EventHandler<TEventArgs>
如果是定制EventArgs
.你的
ReachedEventHandler
不遵循事件的标准约定。他们应该有两个参数(object sender
和TEventArgs args
,其中TEventArgs
是EventArgs
或子类)并返回void
.显式
new Counter.ReachedEventHandler()
调用也是不必要的。
关于c# - 在事件处理 C# 中创建事件变量需要什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21497295/