[英]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
不能覆蓋B
的MyMethod
,而仍然允許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.