soy un poco nuevo en C#, así que se me ocurrió este problema. Pregunta: ¿por qué se llama func2? oh, y una cosa más. Digamos que agrego una función a un delegado. En esta función, llamo a otro delegado; sin embargo, quiero asegurarme de que todas las demás funciones añadidas al primer delegado se invoquen antes de que esta función llame a este delegado, ¿hay alguna solución limpia (que realmente no esté interesada en getInvocationList)? Gracias chicos, eres el mejor.delegado C# no funciona como debería?
class Program
{
delegate void voidEvent();
voidEvent test;
private void func1()
{
Console.Write("func1");
test -= func2;
}
private void func2()
{
Console.WriteLine("func2");
}
static void Main(string[] args)
{
Program p = new Program();
p.test += p.func1;
p.test += p.func2;
p.test();
}
}
+1. Sí. Es por eso que puedes escribir 'var func = p.test; if (func! = null) {func(); } 'en escenarios de subprocesamiento múltiple sin bloquear nada. Porque 'func' es una copia de' p.test' y no le importan los cambios realizados en 'p.test'. –
pero después de que llamo test- = func2 y llamo getinvocationlist puedo ver que func2 ya no está en la lista. Entonces, ¿está diciendo que cada delegado tiene dos listas, una que se está invocando actualmente (y no es accesible) y otra que se invocará la próxima vez? – Yamcha
@ user1316459, realmente no tiene dos listas. Pero cuando invoca a un delegado de un archivo, efectivamente dice algo como: "tome el valor del campo * ahora mismo" y luego invoque eso ". Eso significa que está invocando una copia del valor de 'test', no' test' en sí. – svick