c# 在使用 += 创建事件方法时更改修饰符

c# change modifier when creating event method with +=

如果我将一个新方法订阅到处理程序并在“+=”之后按两次 "Tab" VS 将实现如下主体:

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

  private OnButton1Click(object sender, EventArgs e){

  }
}

如何更改 VS 以将方法主体创建为 public 而不是私有的?

亲切的问候, Asat0r

How can I change VS to create the Body of the Method as public instead of private?

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

其他答案建议该方法不应 public。

从广义上讲,我拒绝这种说法 - 至少没有进一步的理由。 如果您想要公开具有完全相同签名的方法,我通常会这样做。不过有两个注意事项:

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

这两种情况都可以通过使用您想要的参数公开 public 方法来解决(可能 仍然是事件处理程序参数,但通常不会) 然后使用 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();

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