Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否应该遵循内部事件的事件模式?_C#_.net - Fatal编程技术网

C# 我是否应该遵循内部事件的事件模式?

C# 我是否应该遵循内部事件的事件模式?,c#,.net,C#,.net,我理解在事件中使用EventHandler/EventArgs模式的优点,但是它确实会增加很多开销 public class FooBarEventArgs : EventArgs { public int Arg1 { get; set; } public string Arg2 { get; set; } } public event EventHandler<FooBarEventArgs> FooBar; public类FooBarEventArgs:EventA

我理解在事件中使用EventHandler/EventArgs模式的优点,但是它确实会增加很多开销

public class FooBarEventArgs : EventArgs
{
  public int Arg1 { get; set; }
  public string Arg2 { get; set; }
}

public event EventHandler<FooBarEventArgs> FooBar;
public类FooBarEventArgs:EventArgs
{
公共int Arg1{get;set;}
公共字符串Arg2{get;set;}
}
公共事件处理程序FooBar;
你会打破内部事件的事件模式吗

internal event Action<int, string> FooBar;
内部事件操作FooBar;
或者直接公开委托会更好吗

internal Action<int, string> FooBar;
内部动作FooBar;

这取决于很多事情

  • 粒度:这些内部事件是否与外部事件具有相同的规模,或者它们是否更小/更原始/更频繁
  • 可混性:这些内部事件是否与外部事件属于同一类,因此从概念上来说,将它们混合在一起是有意义的
  • 支持:您是否对事件循环(登录、撤消等)使用了任何支持功能,并且希望将这些功能应用于内部事件

正如你所见,没有一个明确的正确答案;这取决于您的意图,以及它们与整个应用程序的匹配程度。

我认为坚持通用模式始终是最佳选择。即使它引入了开销,将来也更容易理解和维护代码。你永远不知道谁会最终维护你的代码,如果不使用这些“快捷方式”,你会帮他/她一个忙。

我相信不遵循常规的事件和事件处理模式(使用EventHandler/EventHandler)会引发FxCop/StyleCop冲突。如果静态代码分析、可读性和代码质量对您/您的项目很重要,那么您应该坚持使用常规事件模式。

考虑一下,它实际上没有那么大的开销。还要注意,属性名将为调用者提供额外的信息,这是像这样使用操作委托时所没有的