【发布时间】: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