我已经开始明白,我不明白发生了什么.C#中存在以下行为:
public class Base
{
public void Method(D a)
{
Console.WriteLine("public void Method(D a)");
}
}
public class Derived: Base
{
public void Method(B a)
{
Console.WriteLine("public void Method(B a)");
}
}
public class B { }
public class D: B { }
class Program
{
static void Main(string[] args)
{
Derived derived = new Derived();
D d = new D();
derived.Method(d);
}
}
Run Code Online (Sandbox Code Playgroud)
它会打印出来
public void Method(B a)
代替
public void Method(D a)
这令人惊讶.我想这种行为的原因是方法表的实现.如果CLR在当前类型中找到相应的方法,则它不会搜索基类中的方法.我认为他们正在努力提高绩效.
但我对以下代码完全失望:
public class Base
{ …Run Code Online (Sandbox Code Playgroud)