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