我在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'的唯一影響是抑制警告。 –