有没有办法在C#中编写基于接口的代码(即使用接口而不是类作为接受和传递的类型)而不放弃类似隐式转换的使用?这里有一些示例代码 - 已经删除了很多,但这些是相关的部分。定义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};
}
}
和接口...
public interface IScrDictionary
{
string Language { get; set; }
string Variant { get; set; }
}
我希望能够使用IScrDictionary
代替ScrDictionary
,但仍能够将ScrDictionary
隐式转换为Game.VariantInfo
。此外,虽然可能有一种简单的方法来让IScrDictionary
属于Game.VariantInfo
类型,但我的问题更普遍:有一种方法可以在接口上定义强制转换或运算符重载?(如果没有,在不放弃面向接口的设计的情况下维护此功能的正确C#方式是什么?)
Hasbro在人们使用拼字游戏名称时并不总是发挥出色。 – 2010-05-05 19:24:15