簡體   English   中英

使用與班級成員密封的運算符

[英]Using operator sealed with the members of the class

我在Troelsen的書中發現, 密封的運算符可用於類的成員上,以保護虛擬方法免受override的影響

但是,如果我不想覆蓋 虛擬方法,將其虛擬化有什么意義?

您可能會遇到以下情況:

public class A
{
    public virtual void MyMethod()
    {
        //...
    }
}


public class B : A
{
    public override void MyMethod()
    {
        //...
    }
}


public class C : B
{
    public override void MyMethod()
    {
        //...
    }
}

但是,如果您希望繼承類C不能覆蓋BMyMethod ,而仍然允許B覆蓋A呢? 然后,您可以執行以下操作:

public class B : A
{
    public sealed override void MyMethod()
    {
        //...
    }
}

進行此更改后,您將無法再覆蓋C的方法。

在這種情況下,請考慮以下示例:

public class A
{
    public virtual void SomeMethod() { }
}

public class B : A
{
    public sealed override void SomeMethod() { }
}

public class C : B
{
    public override void SomeMethod() { }
}

在此示例中,無需使用class B SomeMethod上的sealed關鍵字, class C將能夠覆蓋它,因為它的原始聲明為virtual 在這種情況下, sealed關鍵字會生成編譯器錯誤。 有關更多信息,請參見MSDN

暫無
暫無

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

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