Вызов приватного обработчика событий из внешнего класса

у меня два класса. Один класс (скажем, A) принимает текстовое поле в c'tor. и регистрирует событие TextChanged с помощью закрытого метода обработчика событий. 2-й класс (скажем, B) создает объект класса A, предоставляя текстовое поле.

как вызвать частный обработчик событий класса A из класса B?

он также регистрирует событие MouseClick.

есть ли способ вызвать частные обработчики событий?


person Azodious    schedule 17.06.2010    source источник


Ответы (3)


Краткий ответ: не надо.

Объявите свой обработчик событий общедоступным или, что еще лучше, создайте общедоступный прокси-метод, например

public class MyClass 
{
  private myHandler....

  public returnType DoClick() { return myHandler(...); }  
}

Предоставление прямого доступа к частному члену противоречит цели объявления его частным.

person 3Dave    schedule 17.06.2010

Создайте общедоступный метод, который может вызывать как обработчик событий, так и другой класс. Как правило, вызывать обработчики событий напрямую — плохая идея. Тщательно подумайте о том, что вы пытаетесь сделать, и вы сможете найти структуру кода, которая более точно соответствует концепции того, что вы пытаетесь сделать. Вы не хотите, чтобы ваш другой класс нажимал кнопку; вы хотите, чтобы ваш другой класс делал что-то, что также будет делать нажатие кнопки.

person Dan Bryant    schedule 17.06.2010
comment
+1 Хороший семантический анализ. Если рассматриваемый класс не является компонентом пользовательского интерфейса (страницей или элементом управления), он должен предоставлять не обработчики, а методы, которые будут вызываться обработчиками. - person 3Dave; 17.06.2010

нет ограничений как на подписку с помощью частного метода, так и на запуск события с помощью частного подписчика. Были ли у вас какие-либо ошибки до сих пор?

person Andrey    schedule 17.06.2010
comment
но как класс А может вызывать закрытый метод класса Б? я хочу поднять событие программно. - person Azodious; 17.06.2010