c# - que - una interfaz puede heredar de una clase
¿Por qué no puedo usar la interfaz con el operador explícito? (1)
Esta pregunta ya tiene una respuesta aquí:
Me pregunto si alguien sabe la razón por la cual no se te permite usar interfaces con los operadores implícitos o explícitos.
Por ejemplo, esto aumenta el error de tiempo de compilación:
public static explicit operator MyPlayer(IPlayer player)
{
...
}
"las conversiones definidas por el usuario hacia o desde una interfaz no están permitidas"
Gracias,
La Sección 10.9.3 de la especificación de C # explica 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 no tiene la misma expectativa de conversiones entre los tipos de referencia y los tipos de interfaz.
Las conversiones definidas por el usuario no se pueden convertir desde o a tipos de interfaz . En particular, esta restricción garantiza que no se produzcan transformaciones definidas por el usuario al convertir a un tipo de interfaz , y que una conversión a un tipo de interfaz solo tenga éxito si el objeto que se está convirtiendo realmente implementa el tipo de interfaz especificado.