Mi morbo me ha preguntando por qué falla la siguiente:No se puede asignar un delegado de un tipo a otro a pesar de que la firma partidos
// declared somewhere
public delegate int BinaryOperation(int a, int b);
// ... in a method body
Func<int, int, int> addThem = (x, y) => x + y;
BinaryOperation b1 = addThem; // doesn't compile, and casting doesn't compile
BinaryOperation b2 = (x, y) => x + y; // compiles!
Brilliant! ¡Gracias! (... Necesita esperar 11 minutos para marcar el suyo como la respuesta ...) – Hobbes
La razón para el tipado no estructural es porque la definición de delegado puede tener semántica. No debería poder asignar un "Func" a un "SecureFunc", o un "PureFunc" o un "NoSideEffectsFunc" o lo que sea. En la práctica, nadie hace realmente tipos de delegados que tengan semántica; si tuviéramos que volver a hacerlo, los delegados probablemente tendrían una estructura más estructural. –
@Eric Lippert: Es un punto interesante. ¿Cuál es su opinión sobre por qué hay tantos tipos de delegados "duplicados" con la misma "estructura" en el BCL, como Action, ThreadStart, MethodInvoker? – Ani