1

我刚刚让 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;
4

1 回答 1

3

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

如果您在 Visual Studio 2010中使用“帮助绑定项目的选项”快捷方式Alt++ ,在这种情况下您的两个可能的操作是ShiftF10

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

因此,当您使用 this 时创建属性的事实似乎是设计使然,即使在事件处理程序的情况下它没有任何意义。

于 2013-03-08T17:31:31.627 回答