我有一个简单的基类和派生类:
class Base
{
public virtual void Write(int value)
{
Console.WriteLine("base int: {0}", value);
}
public virtual void Write(string value)
{
Console.WriteLine("base string: {0}", value);
}
}
class Derived : Base
{
public override void Write(int value)
{
Console.WriteLine("derived int: {0}", value);
}
public virtual void Write(IEnumerable enumerable)
{
Console.WriteLine("derived IEnumerable: {0}", enumerable);
}
public virtual void Write(object o)
{
Console.WriteLine("derived obj: {0}", o);
}
}
如果我运行这个:
static void Main(string[] args)
{
Derived d = new Derived();
Console.WriteLine("derived:");
d.Write(42);
d.Write("hello");
Console.WriteLine("base:");
Base b = d;
b.Write(42);
b.Write("hello");
}
我得到:
derived:
derived obj: 42
derived IEnumerable: hello
base:
derived int: 42
base string: hello
但我希望“b.Write(42)”和“d.Write(42)”是相同的。字符串情况也是如此。
我不明白什么?鉴于我无法修改“Base”的约束,我如何才能使行为成为我所期望的?
更新:见埃里克的帖子。