小编Yar*_*lav的帖子

重载继承类中的方法

我已经开始明白,我不明白发生了什么.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)

.net c# clr

14
推荐指数
1
解决办法
378
查看次数

标签 统计

.net ×1

c# ×1

clr ×1