【发布时间】:2009-06-09 00:16:13
【问题描述】:
我不确定我在这里做错了什么。我有一个泛型类,它基本上是一个美化的整数,有一些用于某些字符串格式的方法,以及 in/from 字符串和 int 转换:
public class Base
{
protected int m_value;
...
// From int
public static implicit operator Base(int Value)
{
return new Base(Value);
}
...
// To string
public static explicit operator string(Base Value)
{
return String.Format("${0:X6}", (int)Value);
}
}
而且它运行良好。我可以成功使用隐式和显式转换:
Base b = 1;
Console.WriteLine((string)b); // Outputs "$000001", as expected.
然后我从这个类派生不同的子类,它们打开/关闭 m_value 中不同的命名位。例如:
public class Derived : Base
{
}
然后我不能使用我的隐式到/从 int 转换:
Derived d = 3;
// Cannot implicitly convert type 'int' to 'Derived'. An explicit conversion exists (are you missing a cast?)
即使这样也会出现同样的错误:
Derived d = (int)3;
派生类中是否没有继承隐式/显式转换?如果没有,这将需要大量的代码复制。
回应 非常感谢您的快速回复!你们都应该得到“答案”复选标记,它们都是非常好的答案。关键是要考虑等号两边的类型。现在我这么想,这完全有道理。
我显然只需要重写我的“到派生”转换。 “到 Int32、String 等”的转换仍然适用。
【问题讨论】:
-
有关这一切如何运作的一些微妙之处的更多详细信息,您可能想阅读我关于该主题的文章:blogs.msdn.com/ericlippert/archive/2007/04/16/…
标签: c# inheritance