Зачем использовать EventArgs.Пустой вместо null?
Я помню, что читал, в нескольких случаях и в нескольких местах, что при запуске типичного события:
protected virtual OnSomethingHappened()
{
this.SomethingHappened(this, EventArgs.Empty);
}
e должно быть EventArgs.Пусто, если нет интересных событий args, а не null.
я следовал указаниям в моем коде, но я понял, что мне не ясно, почему это предпочтительный метод.
- почему заявленный контракт предпочитает
EventArgs.Пустой над нулем? - какие ситуации в моем собственном
код оправдать подобную конструкцию
решение? Когда я должен рассмотреть
создание некоторого статического " ничего
интересно здесь " недвижимость вместо
использование null для указания отсутствия
о чем-то интересном? - повлияло ли добавление типов значений с нулевым значением на эти решения?
6 ответов:
Я считаю, что аргументация за NOT NULL заключается в том, что при передаче в качестве параметра не ожидается, что метод должен потенциально обрабатывать исключение null reference.
Если вы передаете null, и метод пытается что-то сделать с e, он получит исключение null reference с EventArgs.Пустым он не будет.
EventArgs.Emptyэкземпляр нулевой объект шаблона.в основном, имея объект, представляющий "нет значения", чтобы избежать проверки на null при его использовании.
Я верю EventArgs.Пустой используется для поддержания соглашения о передаче аргумента с событием, даже если они не нужны.
Mitchel Sellers опубликовал другую половину моей причины на полпути через мой пост: он предотвращает исключение нулевой ссылки, если метод попытается что-то сделать с этим аргументом (кроме проверки, если он равен нулю).
EventArgs.Пустой в основном делает работу глобально определенного аргумента события без каких-либо дополнительных информация.
редактировать
чтобы дать аналогичный пример поддержания конвенции-наша команда использует
string.emptyдля инициализации строки b / c в противном случае разные кодеры могут использоватьnewString = ""; or newString = " "; or newString = null;все из которых могут дать различные результаты для различных условий проверки.
редактировать #2
a (слегка педантичная) причина для использования EventArgs.Пустой Vs new EventArgs () заключается в том, что первый не инициализирует новый EventArgs, сохраняя небольшое количество память.
если вы используете универсальный метод, который имеет
EventHandlerподпись, которая вызывается из любого обработчика событий и передается какobject senderиEventArgs e, оно может вызватьe.ToString(), например, для регистрации событий, не беспокоясь об исключении нулевого указателя.
Я долгое время использовал "new EventArgs()" вместо "EventArgs.Пустой.".. Я думаю, что важно передать что-то, что не вызовет нулевое исключение.
Comments