Existe-t-il un moyen d'écrire du code basé sur une interface (c'est-à-dire en utilisant des interfaces plutôt que des classes comme types acceptés et transmis) en C# sans abandonner l'utilisation de distributions implicites? Voici un exemple de code - il y en a beaucoup supprimé, mais ce sont les parties pertinentes.Définition des lancements implicites et explicites pour les interfaces C#
public class Game
{
public class VariantInfo
{
public string Language { get; set; }
public string Variant { get; set; }
}
}
Et ScrDictionary.cs, nous avons ...
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};
}
}
Et l'interface ...
public interface IScrDictionary
{
string Language { get; set; }
string Variant { get; set; }
}
Je veux être en mesure d'utiliser IScrDictionary
au lieu de ScrDictionary
, mais toujours être en mesure de convertir implicitement un ScrDictionary
en Game.VariantInfo
. En outre, alors qu'il peut y avoir un moyen facile de faire ce travail en donnant IScrDictionary
une propriété de type Game.VariantInfo
ma question est plus généralement: Existe-t-il un moyen de définir les casques ou la surcharge de l'opérateur sur les interfaces? (Sinon, quel est le bon moyen de maintenir cette fonctionnalité en C# sans renoncer à la conception orientée interface?)
Hasbro n'a pas toujours joué bien quand les gens utilisent le nom Scrabble ... –