使用+ =

时间:2018-05-16 12:28:13

标签: c# visual-studio events modifier

如果我为处理程序订阅了一个新方法,请按" Tab" " + ="之后两次VS将实现一个像:

的Body
public class A {
  public A(){
    button1.Click += OnButton1Click();
  }

  private OnButton1Click(object sender, EventArgs e){

  }
}

如何更改VS以将方法正文创建为公共而非私有?

亲切的问候, Asat0r

2 个答案:

答案 0 :(得分:1)

  

如何更改VS以将方法正文创建为公共   私人?

不确定是否有任何选项,但为什么你想这样做?事件处理程序并不是public。如果你想从其他类型调用处理程序内部的逻辑,那么将该逻辑重构为辅助方法并重新使用它。

答案 1 :(得分:0)

其他答案表明该方法不应公开。

从广义上讲,我拒绝这一点 - 至少没有进一步的理由。 如果您希望公开一个具有该签名的方法,我通常会继续这样做。尽管有两个警告:

  • 通常情况下,事件处理程序的签名除了作为事件处理程序外没有用处。在直接调用方法时,参数通常不常用。这有例外。
  • 如果您使用公共方法订阅事件处理程序,则任何其他代码都可以通过创建相等的委托来取消订阅该事件处理程序。如果您控制应用程序中的所有代码,那就不是问题了。

这两种情况都可以通过公开一个具有所需参数的公共方法来解决(可能仍然是事件处理程序参数,但通常不会成为)然后使用lambda表达式订阅活动:

// I want to be able to call this from other code
public void SaveItem()
{
    // ...
}

// Hook up the event handler using a lambda expression
saveButton.Click += (sender, args) => SaveItem();

另一方面,如果两个子弹点都不是问题,请继续手动公开方法。我不希望有VS快捷方式这样做,但只需指定public修饰符就非常简单。