2017-01-27 2 views
3

Вот пример ...Как поймать событие стрельбы из конструктора класса

public class CodeGenerator 
{ 
    public delegate void GeneratorCalculatorEventHandler(decimal Fond); 
    public event GeneratorCalculatorEventHandler eventName; 

    public CodeGenerator() 
    { 
      eventName?.Invoke(0); 
    } 
} 

Как я мог поймать событие? Если я это сделаю:

CodeGenerator CodeGen = new CodeGenerator(); 
CodeGen.eventName  += CodeGen_eventName; 

Событие запускается, когда хендлер еще не подписан на него. Можно ли подписаться на событие по инициализации?

+0

Я знаю, что я сказал, что, как к нему правильно. Это то, что я прошу – ShadyOverflow

+0

Это не кажется возможным, возможно, обходным путем, когда вы используете метод Init() 'после contructor? – GWigWam

+1

Передайте его в конструкторе –

ответ

1

Вы должны пройти обработчик конструктору и прикрепить его к событию, что-то вроде:

public class CodeGenerator 
{ 
    public delegate void GeneratorCalculatorEventHandler(decimal Fond); 
    public event GeneratorCalculatorEventHandler eventName; 

    public CodeGenerator(GeneratorCalculatorEventHandler listener) 
    { 
     eventName += listener; 
     eventName?.Invoke(0); 
    } 
} 

public class Test 
{ 
    public Test() 
    { 
     CodeGenerator gen = new CodeGenerator((sen) => { return; }); 
    } 
} 
+0

ОК, это работает, во всяком случае, если честно, я бы хотел, чтобы было другое, более чистое путь, но все же, пока работает ti, все это хорошо, спасибо вам, сэр. и всех остальных, кто прокомментировал quesiton. – ShadyOverflow

7

Как сказал комментарии, это плохой код запах. Похоже, вы делаете что-то очень необычное здесь, и вам стоит подумать о том, чтобы попытаться найти другой способ решить вашу проблему.

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

Я бы не передал обработчик конструктору, был ли я в вашей ситуации. Я бы использовал статическое событие.

Смежные вопросы