microsoft - event c#
Diferencia entre delegado. Invocar y delegar() (3)
delegate void DelegateTest();
DelegateTest delTest;
¿Cuál es la diferencia entre llamar a delTest.Invoke()
y delTest()
? Ambos ejecutarían al delegado en el hilo actual, ¿verdad?
El delTest()
es un ayudante de compilación, debajo de esto hay una llamada a Invoke()
.
Eso es correcto. Ambos tienen exactamente el mismo resultado.
Dado que ha inicializado correctamente delTest
de curso, por supuesto.
La respuesta de Richard es correcta; sin embargo, comenzando con C # 6.0, hay una situación en la que usar Invoke()
directamente podría ser ventajoso debido a la adición del operador condicional nulo . Por los documentos de MS:
Otro uso para el acceso de miembro condicional nulo es invocar delegados de una manera segura para subprocesos con mucho menos código. La forma antigua requiere un código como el siguiente:
var handler = this.PropertyChanged;
if (handler != null)
handler(…);
La nueva forma es mucho más simple:
PropertyChanged?.Invoke(…)
La nueva forma es segura para subprocesos porque el compilador genera código para evaluar PropertyChanged solo una vez, manteniendo el resultado en una variable temporal. Debe llamar explícitamente al método Invoke porque no hay una sintaxis de invocación de delegado condicional nula PropertyChanged? (E).