[英]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.