簡體   English   中英

如果默認情況下方法既不是虛擬的也不是密封的,那么為什么這個方法覆蓋了非虛擬和非密封的方法?

[英]If methods are neither virtual nor sealed by default, then why does this method override of a non-virtual and non-sealed method work?

有好幾次,我被告知 C# 類中的方法默認既不是密封的也不是虛擬的。 盡管如此,下面的代碼工作得很好,並打印了兩個明確預期的字符串。 這是我很困惑的有力證據。 我不知道什么默認值或功能?

Child ExampleChild = new Child();
ExampleChild.SayHello();
Parent ExampleParent = new Parent();
ExampleParent.SayHello();

public class Parent
{
    public void SayHello() => Console.WriteLine("Hello from parent");
}
public class Child : Parent
{
    public void SayHello() => Console.WriteLine("Hello from child");
}

您正在定義一個新方法( Child.SayHello() ),它隱藏了父方法。 有一個編譯器警告告訴你。

理想情況下,新方法應標記為new方法,以明確意圖。 它不會參與動態調度,即如果你有一個Parent類型的變量,那么Parent.SayHello()將被調用。

另請參閱C# Inheritance 和成員隱藏

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM