C'è un modo per scrivere codice basato sull'interfaccia (ad esempio utilizzando interfacce anziché classi come i tipi accettati e passati) in C# senza rinunciare all'uso di cose come i cast impliciti? Ecco alcuni esempi di codice: ce ne sono stati molti rimossi, ma queste sono le parti rilevanti.Definizione dei cast impliciti ed espliciti per le interfacce C#
public class Game
{
public class VariantInfo
{
public string Language { get; set; }
public string Variant { get; set; }
}
}
E in ScrDictionary.cs, abbiamo ...
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};
}
}
E l'interfaccia ...
public interface IScrDictionary
{
string Language { get; set; }
string Variant { get; set; }
}
Voglio essere in grado di utilizzare al posto di IScrDictionary
ScrDictionary
, ma essere ancora in grado di convertire implicitamente uno ScrDictionary
in un Game.VariantInfo
. Inoltre, mentre potrebbe esserci un modo semplice per farlo funzionare dando a IScrDictionary
una proprietà di tipo Game.VariantInfo
la mia domanda è più in generale: C'è un modo per definire i cast o l'overloading degli operatori sulle interfacce? (In caso contrario, qual è il modo C# corretto per mantenere questa funzionalità senza rinunciare alla progettazione orientata all'interfaccia?)
Hasbro non ha sempre suonato bene quando le persone usano il nome Scrabble ... –