【问题标题】:There is override and hidden method exist in derived class. Why?派生类中存在覆盖和隐藏方法。为什么?
【发布时间】:2015-08-18 19:43:46
【问题描述】:

有一个代码示例:

public class A 
{
    public virtual void M()
    {
        Console.WriteLine("A");

    }
}

public class B : A
{
    public override void M()
    {
        Console.WriteLine("B");
    }

}

public class C : B
{
    public new virtual void M()
    {
        Console.WriteLine("C");
    }
}

public class D : C
{
    public override void M()
    {
        Console.WriteLine("D");
    }
}



internal class Program
{
    static void Main()
    {
        C c = new C();
        foreach (var method in typeof (C).GetMethods().Where(_ => _.Name == "M"))
        {
            method.Invoke(c, new object[0]);
        }
        c = new D();
        foreach (var method in typeof(D).GetMethods().Where(_ => _.Name == "M"))
        {
            method.Invoke(c, new object[0]);
        }
    }
}

即使在被下一个层次级别的类隐藏的情况下,我也知道层次结构中存在覆盖的方法。你能解释一下为什么吗?或者只是给我一个链接,这样我就可以找到?谢谢。

【问题讨论】:

  • 因为方法被隐藏了,没有去掉?如果它真的删除了方法,他们会称之为“方法删除”而不是“方法隐藏”。

标签: c# inheritance methods overriding hidden


【解决方案1】:

这就是隐藏某些东西的想法——它仍然存在。

如果 C# 不允许这种隐藏,如果方法名称已经存在于基类中,他们将不得不禁止使用。

基类方法仍然存在;否则基类将不再正常运行。您只是不能直接从派生自它的类实例中访问它:

C c = new C();
c.M(); // returns C
((B)c).M(); // returns B

【讨论】:

  • 好吧。就是这样了。我只是认为还有更多的东西。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多