¿Hay alguna manera de escribir código basado en interfaz (es decir, usando interfaces en lugar de clases como los tipos aceptados y transmitidos) en C# sin renunciar al uso de elementos como moldes implícitos? Aquí hay un código de muestra: se ha eliminado mucho, pero estas son las partes relevantes.Definición de conversiones implícitas y explícitas para interfaces C#
public class Game
{
public class VariantInfo
{
public string Language { get; set; }
public string Variant { get; set; }
}
}
Y en ScrDictionary.cs, tenemos ...
public class ScrDictionary: IScrDictionary
{
public string Language { get; set; }
public string Variant { get; set; }
public static implicit operator Game.VariantInfo(ScrDictionary s)
{
return new Game.VariantInfo{Language=sd.Language, Variant=sd.Variant};
}
}
Y la interfaz ...
public interface IScrDictionary
{
string Language { get; set; }
string Variant { get; set; }
}
Quiero ser capaz de utilizar IScrDictionary
en lugar de ScrDictionary
, pero todavía podrá convertir implícitamente un ScrDictionary
a un Game.VariantInfo
. Además, si bien puede haber una manera fácil de hacer que esto funcione dando a IScrDictionary
una propiedad del tipo Game.VariantInfo
mi pregunta es más general: ¿Hay alguna manera de definir las conversiones o la sobrecarga del operador en las interfaces? (En caso negativo, ¿cuál es la forma correcta de C# para mantener esta funcionalidad sin renunciar al diseño orientado a la interfaz?)
Hasbro no siempre ha jugado bien cuando las personas usan el nombre Scrabble ... –