在C#中,是否有一种方法可以编写基于接口的代码(即使用接口而不是类作为接受和传递的类型),而不放弃使用隐式转换之类的功能?以下是一些示例代码-已删除了很多内容,但这些是相关部分。
public class Game
{
public class VariantInfo
{
public string Language { get; set; }
public string Variant { get; set; }
}
}
而在 ScrDictionary.cs 中,我们有...
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};
}
}
而且这个接口在Python 3.x中已经被删除了,你需要使用tkinter.messagebox
代替。
public interface IScrDictionary
{
string Language { get; set; }
string Variant { get; set; }
}
我想要使用IScrDictionary
代替ScrDictionary
,但仍然能够将ScrDictionary
隐式转换为Game.VariantInfo
。同时,虽然通过给IScrDictionary
一个类型为Game.VariantInfo
的属性可以轻松解决此问题,但我的问题更普遍:是否有一种方法在接口上定义强制转换或运算符重载?(如果没有,使用正确的C#方式来保持此功能而不放弃面向接口的设计是什么?)