【发布时间】:2010-05-05 19:19:32
【问题描述】:
有没有办法在 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# 方法是什么?)
【问题讨论】:
-
当人们使用 Scrabble 这个名字时,孩之宝并不总是表现得很好......