Мне надоело иметь весь этот бесполезный шум в моем коде:
private void RaiseSomeOtherEventIfItIsNotNull()
{
if (this.SomeOtherEvent != null)
{
this.SomeOtherEvent(this, EventArgs.Empty);
}
}
В 99,9% случаев мне все равно, кто к нему подключен или он нулевой или нет,Просто поднять событие!Я действительно не понимаю, почему компилятор c # заставляет меня писать весь этот шум.
Поэтому я подумал, что мог бы объявить событие, подобное этому:
public event EventHandler SomeOtherEvent = delegate { };
, это позволило бы мнеизбавиться от бесполезной нулевой проверки и бесполезного метода повышения *.Я всегда мог сделать следующее:
this.SomeOtherEvent(this, EventArgs.Empty);
Теперь, когда я сравниваю стандартный подход с «моим» подходом в Reflector Лутца Редера, я вижу некоторые существенные различия.Компилятор переопределил Add{}
и Remove{}
, есть дополнительный статический экземпляр анонимного делегата:
[CompilerGenerated]
private static EventHandler CS$<>9__CachedAnonymousMethodDelegate1;
, и есть это:
.method private hidebysig static void <.ctor>b__0(object, class [mscorlib]System.EventArgs) cil managed
{
.custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor()
.maxstack 8
L_0000: nop
L_0001: ret
}
Теперь мой вопрос: сделатьВы видели какие-либо проблемы или недостатки в удалении событий с инициализацией по умолчанию, подобной этой?