c # изменить модификатор при создании метода события с + = - PullRequest
0 голосов
/ 16 мая 2018

Если я подпишу новый метод на обработчик и дважды нажму «Tab» после того, как «+ =» VS будет реализовывать тело вроде:

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

  private OnButton1Click(object sender, EventArgs e){

  }
}

Как я могу изменить VS для создания телаМетод как публичный, а не приватный?

С уважением, Asat0r

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Другие ответы предполагают, что метод не должен быть публичным.

В общем, я отвергаю это - по крайней мере, без дальнейшего обоснования. Если вы хотите выставить метод именно с такой сигнатурой, я бы обычно так и делал.Однако есть два предостережения:

  • Обычно подпись обработчика событий бесполезна , за исключением в качестве обработчика событий;параметры обычно не используются при непосредственном вызове метода.Как и всегда, есть исключения.
  • Если вы подпишете обработчик событий с помощью открытого метода, любой другой код может отписаться от этого обработчика событий, создав равный делегат.Если вы управляете всем кодом в приложении, это не составляет большой проблемы.

Оба случая можно решить, предоставив общедоступный метод с точно такими параметрами, которые вы хотите (что может все еще будут параметрами обработчика события, но часто не будут) и затем используют лямбда-выражение для подписки на событие:

// 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 довольно просто.

0 голосов
/ 16 мая 2018

Как я могу изменить VS, чтобы создать тело метода как общедоступное, а не частное?

Не уверен, есть ли какая-либо опция, но почему вы хотели бы это сделать?обработчики событий не должны быть public.Если вы хотите вызвать логику внутри обработчика из какого-либо другого типа, то выполните рефакторинг этой логики в вспомогательный метод и, возможно, используйте его снова.

...