Cuando implemento un evento en Visual Studio, Resharper tiene la amabilidad de ofrecerme la creación de un invocador de eventos. Solía hacer esto a mano en el pasado, y mis invocators siempre se veía asíInvocadores de eventos en C#
private void InvokePropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
pero el invocador creado por ReSharper tiene este aspecto (limpiado un poco a mano)
private void InvokePropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler changed = PropertyChanged;
if (changed != null)
{
changed(this, e);
}
}
Haga lo las personas en jetbrains saben algo sobre C# yo no? ¿Hay alguna ventaja técnica para tener la variable local, o es solo un artefacto de tener que generar automáticamente el código?
son u seguro de eso? no los dos "apuntan" a la misma lista de invocación? – BFree
No necesariamente. La lista completa podría cambiar, en general. Tenga en cuenta que ReSharper es una herramienta "general". Usted parece estar asumiendo que lo único que sucede con el evento es + = y - =. Tal vez sí, tal vez no, pero el modo "ReSharper" cubre todas las bases. –
En realidad, la cantidad de suscriptores no importa, eso es responsabilidad del delegado. Sin embargo, es importante el hecho de que el delegado sea nulo si no hay suscriptores. Si no hay suscriptores, el campo es nulo. Copia una referencia nula, por lo tanto, si se agrega un suscriptor después, si no lo ve, no fallará. –