2015-01-27 3 views
-2

Я создаю приложение, используя шаблон MVP. Чтобы все происходило в презентаторе, я создаю события в представлении, и ведущий будет следить за ними. ReSharper дает мне предупреждения о возможном исключении ссылочной ссылки, и я вижу учебники, которые проверяют значение null перед запуском событий. Каким образом события могут быть нулевыми? Ниже приведен пример моего кода:В каком сценарии это событие будет нулевым?

public partial class PrinterSelectView : Form, IPrinterSelectView 
{ 
    public PrinterSelectView() 
    { 
     InitializeComponent(); 
    } 

    public event Action Canceled; 
    public event Action Saved; 

    private void btnCancelClick(object sender, EventArgs e) 
    { 
     if(Canceled != null) 
     { 
      Canceled(); 
     } 
    } 

} 
+0

Хотелось бы узнать, почему кто-то считает, что неясно, о чем я прошу. – Logarr

ответ

5

Если код не регистрируется для события (звонки Canceled += <some code>), то событие будет нулевым. Проверка позволяет зарегистрировать слушателей до запуска события.

+0

Так что это не само представление, которое делает это событие действительным, но ведущим, когда оно связывает событие с используемым методом. Спасибо за разъяснения. – Logarr

1

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

var view = new PrinterSelectView(); 
view.Canceled += OnCanceled; // now it's not null 

Но прежде, или если абонент не поддерживает ваше мероприятие будет нулевым.

Одним общим способом предотвращения такого рода предупреждения, это просто всегда присвоить пустой делегат ему себя, например:

public partial class PrinterSelectView : Form, IPrinterSelectView 
{ 
    public event Action Canceled =() => { }; // will never be null now 
    public event Action Saved =() => { }; 
    // ... 
} 

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

+0

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

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