使用类成员密封的运算符
本文关键字:运算符 密封 成员 | 更新日期: 2023-09-27 18:05:59
我在Troelsen的书中发现,运算符密封可以在类的成员上使用,以保护虚拟方法不受覆盖的影响。
但是,如果我不想覆盖一个虚拟方法,那么让它成为虚有什么意义呢?
您可能会遇到这样的情况:
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。