gpt4 book ai didi

.net - .NET 事件的签名

转载 作者:行者123 更新时间:2023-12-04 23:59:05 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




8年前关闭。




Possible Duplicate:
Why should events in C# take (sender, EventArgs)?



我刚刚在一个项目上运行了 VS2012 代码分析工具,发现它提示这个片段:
public delegate void PerMbHandler(long totalMb);

public event PerMbHandler NotifyMegabyteIncrement;

CA1009 Declare the second parameter of 'MyWebClient.PerMbHandler' as an EventArgs, or an instance of a type that extends EventArgs, named 'e'.



MSDN explains :

Event handler methods take two parameters. The first is of type System.Object and is named 'sender'. This is the object that raised the event. The second parameter is of type System.EventArgs and is named 'e'. This is the data that is associated with the event. For example, if the event is raised whenever a file is opened, the event data typically contains the name of the file.



MSDN 只是简单地说明了约定是什么,而不是它存在的原因。

使用长参数而不是 EventArgs 的子类会出现什么问题?这是惯例和程序员期望的问题,还是必须遵循某种微妙的技术原因?我说微妙,因为代码似乎工作正常。

最佳答案

What can go wrong using a long parameter rather than a subclass of EventArgs?



事件参数
这本身并没有错,但它不可扩展。为了论证,也许在 6 个月内您需要传递两个 long,或者添加一个字符串,或者添加整个信息列表。与 EventArgs在签名中,您可以传递任何派生类型,而不会破坏现有的消费者;对于特定的值类型,您的作用非常有限。

EventArgs 还允许您与引发事件的类进行通信,例如 CancelEventArgs .

发件人
老实说,我很少使用 sender 做任何事情。它也可能有些模棱两可。例如,控件上的自定义事件由文本框输入触发...发件人是谁?文本框(可能更有用),还是声明自定义事件的控件?

尽管如此,它仍然是一个熟悉的约定,并且具有良好记录的界面可能很有用。

关于.net - .NET 事件的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com