我在C#以下类:虚拟和新的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();
}
}
运行的主要功能后,我得到这个:
Derived Via Base Reference
Derived.DoSomethingVirtual
Base.DoSomethingNonVirtual
Derived Via Derived Reference
Derived.DoSomethingVirtual
Derived.DoSomethingNonVirtual
为什么baseRef.DoSoemthingNonVirtual调用基函数?它是否与该函数的派生类中的“new”关键字有关? 我明白“虚拟”和“覆盖”的重要性。我的混淆是由声明造成的: BaseClass BaseRef = new DerivedClass();
这里'new'的唯一影响是抑制警告。 –