【发布时间】:2016-03-01 00:32:23
【问题描述】:
我在 C# 中有以下类:
public class BaseClass
{
public virtual void DoSomethingVirtual()
{
Console.WriteLine("Base.DoSomethingVirtual");
}
public new void DoSomethingNonVirtual()
{
Console.WriteLine("Base.DoSomethingNonVirtual");
}
}
public class DerivedClass : BaseClass
{
public override void DoSomethingVirtual()
{
Console.WriteLine("Derived.DoSomethingVirtual");
}
public new void DoSomethingNonVirtual()
{
Console.WriteLine("Derived.DoSomethingNonVirtual");
}
}
class ConsoleInheritanceTrial
{
static void Main(string[] args)
{
Console.WriteLine("Derived via Base Reference.");
BaseClass BaseRef = new DerivedClass();
BaseRef.DoSomethingVirtual();
BaseRef.DoSomethingNonVirtual();
Console.WriteLine();
Console.WriteLine("Derived via Dereived Reference.");
DerivedClass DerivedRef = new DerivedClass();
DerivedRef.DoSomethingVirtual();
DerivedRef.DoSomethingNonVirtual();
Console.Read();
}
}
运行 Main 函数后,我得到了这个:
Derived Via Base Reference
Derived.DoSomethingVirtual
Base.DoSomethingNonVirtual
Derived Via Derived Reference
Derived.DoSomethingVirtual
Derived.DoSomethingNonVirtual
为什么baseRef.DoSoemthingNonVirtual 会调用base 函数?它与该函数的派生类中的“new”关键字有关吗? 我理解“虚拟”和“覆盖”的重要性。我的困惑是由以下声明引起的: BaseClass BaseRef = new DerivedClass();
【问题讨论】:
-
这里
new的唯一作用是抑制警告。