【发布时间】:2010-09-05 22:24:03
【问题描述】:
class Base
{
public virtual void MethodA(int x)
{
Console.WriteLine ("In Base Class");
}
}
class Derived : Base
{
public override void MethodA(int x)
{
Console.WriteLine ("In derived INT)");
}
public void MethodA(object o)
{
Console.WriteLine ("In derived OBJECT");
}
}
class Test
{
static void Main()
{
Derived d = new Derived();
int k = 20;
d.MethodA(k);
}
}
我得到的输出是“在派生的对象中”。这种奇怪行为的原因是什么?经过一番研究,我发现原因是在基类中声明的签名被忽略了。为什么他们会被忽视?
【问题讨论】:
-
+1 这个问题,我同意这是违反直觉的行为。
-
我同意这种行为很奇怪。我想知道:你问这个是因为你真的想这样做还是因为你很好奇?我看不出实际实施这样的事情的理由,但我肯定想知道它为什么会发生。
-
问题中的代码与此答案中的代码几乎相同:stackoverflow.com/questions/710459/…,所以你去吧。
标签: c# inheritance