C# 在接口中声明事件时的代码分析警告
为什么以下接口中的事件声明会在代码分析器中使用CA1009进行抱怨?在实现中,它确实似乎遵循了事件声明的标准约定C# 在接口中声明事件时的代码分析警告,c#,visual-studio-2013,code-analysis,C#,Visual Studio 2013,Code Analysis,为什么以下接口中的事件声明会在代码分析器中使用CA1009进行抱怨?在实现中,它确实似乎遵循了事件声明的标准约定 using System; namespace Client.Wpf.Utilities.MessageSubscription { public interface ITrigger<TMessageType> { event EventHandler<TMessageType> Fire; } } CA1009正
using System;
namespace Client.Wpf.Utilities.MessageSubscription
{
public interface ITrigger<TMessageType>
{
event EventHandler<TMessageType> Fire;
}
}
CA1009正确声明事件处理程序
将“EventHandler”的第二个参数声明为EventArgs或扩展EventArgs的类型的实例,名为“e”
ITrigger.cs 7
以及实施:
using System;
//using GalaSoft.MvvmLight.Messaging;
namespace Client.Wpf.Utilities.MessageSubscription
{
public class MvvmMessageTrigger<TMessageType> : ITrigger<TMessageType>
{
public MvvmMessageTrigger()
{
//Messenger.Default.Register<TMessageType>(this, InvokeSubscribers);
}
public event EventHandler<TMessageType> Fire;
private void InvokeSubscribers(TMessageType messageType)
{
if (null != Fire)
{
Fire(this, messageType);
}
}
}
}
错误是不言而喻的: 将“EventHandler”的第二个参数声明为EventArgs或扩展EventArgs的类型的实例,名为“e”
在我上面的示例中,TMessageType不是从EventArgs继承的,因此出现警告。TMessageType的声明是什么?在这两个地方,它只是一个普通的旧类,没有什么特别之处。public类{public string SomeProperty{get;set;}}},所以它不是像所有.NET事件数据参数一样从EventArgs派生的?这就是消息所抱怨的。如果愿意,可以忽略它,它只会混淆程序员将要为事件编写事件处理程序的内容。这可能会有所帮助@汉斯帕桑:是的,就是这样,请把答案贴出来。但仍然没有改变它: