2012-06-14 7 views
6

Así que estos dos métodos tienen la misma firma, pero diferentes limitacioneslimitaciones Mutally exclusivos en dos métodos con la misma firma

public static void Method<T>(ref T variable) where T : struct { } 

public static void Method<T>(ref T variable) where T : class { } 

Pero no se puede definir en una sola clase, ya que tienen las mismas firmas. Pero en este caso particular son mutuamente excluyentes. (A menos que me equivoque en eso)

entiendo que puede poner restricciones adicionales, además de class y struct pero no se puede especificar tanto struct y class en el mismo método. Entonces, ¿por qué no se compila?

+4

Lo dices tú mismo, * porque tienen las mismas firmas *. –

+0

Tiene una solución, porque he pensado en una si la necesita. – bluevector

+4

[Las restricciones no son parte de la firma.] (Http://blogs.msdn.com/b/ericlippert/archive/2009/12/10/constraints-are-not-part-of-the-signature.aspx) –

Respuesta

4

Son semánticamente mutuamente excluyentes, sí. Pero el compilador los ve como teniendo el mismo "nombre", de ahí la ambigüedad. "Nombre" aquí significa "firma de método".

+0

'teniendo el mismo nombre, de ahí la ambigüedad. ???? –

+0

@ L.B "nombre" es un coloquialismo para "firma de método" Debería ser más explícito y no utilizar taquigrafía manual :) – bluevector

2

Aunque el compilador podría ser lo suficientemente inteligente como para resolverlo (lo que parece no ser), no sabe qué hacer para object (como puede ser class o struct).

Cuestiones relacionadas