Visual Studio创建属性而不是方法事件处理程序。为什么?

时间:2013-03-08 17:10:34

标签: c# visual-studio-2010 visual-studio-2012

我刚刚为VS生成了一个事件处理程序,它创建了一个属性而不是一个方法。我不明白。我刚刚在VS 2012中尝试了一个单独的测试,它按预期工作。

首先,这是我的测试,我认为它会起作用:

private static void EventTest()
{
    Geek skeet = new Geek();

    skeet.SomeEvent += skeet_SomeEvent;
}

当我让VS为我生成处理程序时,它创建了这个。

static void skeet_SomeEvent(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

这是有道理的。调用事件时将调用该方法。

现在,问题是......我在VS 2010中处理现有项目,当我做同样的事情时(让VS生成处理程序):

private void SubscribeToPlcDataChangeEvents()
{
    _plc.PlcLoggerEventHandler += _plcLoggerEventHandler;
}

它创建了一个属性:

public EventHandler<PlcLoggerEventArgs> _plcLoggerEventHandler { get; set; }

为什么呢?我不明白。我想在方法中处理事件。

编辑 - 这是声明事件处理程序的方式:

public event EventHandler<PlcLoggerEventArgs> PlcLoggerEventHandler;

1 个答案:

答案 0 :(得分:3)

如果你点击 Tab 两次,你会注意到它是在事件处理程序的情况下“正确”生成的。

如果在Visual Studio 2010中使用“帮助绑定项目的选项”快捷方式 Alt + Shift + F10 ,在这种情况下,您可能采取的两种行动是:

  • 在......
  • 中为'PlcLoggerEventHandler'生成属性存根
  • 在......
  • 中为'PlcLoggerEventHandler'生成字段存根

因此,当你使用它时创建一个属性的事实似乎是By Design,即使在事件处理程序的情况下也没有意义。