2010-03-12 9 views
22

Me pregunto si alguien sabe el motivo por el que no está permitido utilizar interfaces con los operadores implícitos o explícitos.¿Por qué no puedo usar la interfaz con operador explícito?

E.g. esto plantea compilar error de tiempo:

public static explicit operator MyPlayer(IPlayer player) 
{ 
... 
} 

"conversiones definidas por el usuario hacia o desde una interfaz no se les permite"

Gracias,

+0

El enfoque más simple es, bueno, sólo implementar la interfaz para su clase concreta :) Véase también http://stackoverflow.com/questions/308986/user-defined-conversion-to-interface – nawfal

+0

que comencemos ni 'public' ni' static' están permitidos en las definiciones de los miembros de la interfaz. – quetzalcoatl

Respuesta

30

Section 10.9.3 of the C# spec hechizos esto. La versión corta es no permitida, de modo que el usuario puede estar seguro de que las conversiones entre los tipos de referencia y las interfaces tienen éxito si y solo si el tipo de referencia realmente implementa esa interfaz, y que cuando ocurre esa conversión se hace referencia al mismo objeto.

La definición de una conversión implícita o explícita entre los tipos de referencia ofrece al usuario la expectativa de que habrá un cambio en la referencia; después de todo, la misma referencia no puede ser de ambos tipos. Por otro lado, el usuario hace no tienen la misma expectativa para las conversiones entre tipos de referencia y tipos de interfaz.

User-defined conversions are not allowed to convert from or to interface-types. In particular, this restriction ensures that no user-defined transformations occur when converting to an interface-type, and that a conversion to an interface-type succeeds only if the object being converted actually implements the specified interface-type.

+0

¡gracias, eso lo explica! – theburningmonk

+0

"La definición de una conversión implícita o explícita entre los tipos de referencia le da al usuario la expectativa de que habrá un cambio en la referencia" ¡gran explicación! – jorgebg

+0

Eso explica por qué el equipo de diseño de idiomas impidió las conversiones implícitas a los tipos de interfaz. ¿Sabes por qué, además, decidieron restringir las conversiones _de los tipos de interfaz? ¿Fue solo por simetría? –

Cuestiones relacionadas