繁体   English   中英

什么时候应该在C#中使用事件

[英]When should we use event in C#

我是C#和WPF的新手。 我刚刚学习了C#中的异步编程。 我们引发事件,并在一些地方捕获此事件。

这种方法的优点是我们不需要直接调用对象方法。 例如,我们从数据库加载数据,然后在完成加载数据方法后,它引发事件LoadDataSuccessfully然后主类捕获此事件并引发事件UpdateGUIAfterLoadDataSuccessfully ,其他一些Control会捕获此事件并更新GUI。

但是现在我想可能是...我在项目中使用了太多,可能是我过度使用了它。 请在何时使用Event以及何时以传统方式使用时给我一些建议。

当发起动作的代码不了解直接对该动作做出反应的代码时,应使用事件。

让我们借助示例进行说明

在您的系统中,您有发送给您的数据对象,例如您每分钟从外部系统发送50个数据对象。接收到该数据后,您需要让它由另一个对象处理。

在这种情况下,使用事件或简单的方法调用会更好吗?

回答

一方面,事件在这里听起来确实合适,因为处理数据接收的代码不应依赖于对所述数据执行某些操作的代码的实现。 否则,数据接收代码现在负责两件事-接收数据委派数据处理。

另一方面,如果数据的特定处理直接与外部调用方发送的数据相关,则将其设为函数调用可能更有意义

看看这个

这是对您上面所写内容的一些评论/答案

“此方法的优点是我们不需要直接调用对象方法。” –是,但这并不意味着您应该为所有事件都发生事件并且根本避免显式方法调用。 提供的示例Kyle是一个很好的例子。 另外–查看事件在.NET中的默认使用方式–它们仅用于异步事件(鼠标单击,鼠标悬停等)

“例如,我们从数据库加载数据,然后在加载数据方法完成后,它引发事件LoadDataSuccessfully,然后主类捕获此事件并引发事件UpdateGUIAfterLoadDataSuccessally,其他一些控件将捕获此事件并更新GUI。” –我只想如果需要不定期刷新数据,则可以使用此方法,但是甚至不确定。 不使用事件以您在此描述的方式加载数据是很常见的。 请注意,您写的内容意味着您有一个线程用于加载数据,而另一个线程用于GUI…

“我在项目中使用过多,可能是我过度使用了。” –您对此可能是正确的。

简而言之,“事件”用于让其他对象决定应在事件触发器上执行哪些操作或代码,但是我建议开始使用“命令”以获取更多信息http://msdn.microsoft.com/zh-CN /library/ms752308.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM