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
修饰符就非常简单。
如果我将一个新方法订阅到处理程序并在“+=”之后按两次 "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
修饰符就非常简单。