我在Troelsen的书中发现,可以在班级成员上使用密封运算符来保护覆盖 方法强>
但如果我不想覆盖 虚拟方法,那么将其设为虚拟会有什么意义?
答案 0 :(得分:1)
你可能会遇到这样的情况:
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
覆盖{ {1}}' S?然后你可以这样做:
A
进行此更改后,您无法再覆盖public class B : A
{
public sealed override void MyMethod()
{
//...
}
}
中的方法。
答案 1 :(得分:1)
在此上下文中,请考虑以下示例:
public class A
{
public virtual void SomeMethod() { }
}
public class B : A
{
public sealed override void SomeMethod() { }
}
public class C : B
{
public override void SomeMethod() { }
}
在此示例中,如果sealed
SomeMethod
class B
class C
未使用virtual
,sealed
将能够覆盖它,因为它的原始声明为{{ 1}}。此上下文中的{{1}}关键字会生成编译器错误。请参阅MSDN for more information。