Iva*_*van 8 .net c# overriding sealed
我相信我希望类的一些方法和属性是不可重写的,并在所有派生类中使用base的实现.怎么做到这一点?sealed关键字似乎不起作用,并说"方法不能被密封,因为它不是覆盖".
Jon*_*eet 15
默认情况下,成员在C#中被密封 - 除非它们被标记为虚拟,否则它们无法在派生类中被覆盖.
不可否认,它们可以在派生类中被遮蔽:
public new void SomeMethod()
{
}
Run Code Online (Sandbox Code Playgroud)
......但这与重写不一样.你无法阻止这种情况,但是如果调用者使用基类的编译时类型,他们最终不会意外地调用它.
如果你可以给我们更多的细节恰好(被称为从主叫方的POV和代码两者)你想阻止什么,我们也许能够帮助更多.
除非您将其标记为,否则不会覆盖的方法不会被覆盖virtual.所以听起来在你的情况下不需要采取任何行动.
class A
{
public void B() {} // can't override
public virtual C() {} // can override
public virtual D() {} // can override
}
Run Code Online (Sandbox Code Playgroud)
sealed仅当方法已经覆盖基类中的成员时,修饰符才适用.这使您可以防止在覆盖的子类是类.
class A1 : A
{
public void B() {} // shadows A.B. Not a virtual method!
public override C() {} // overrides A.C, subclasses can override
public override sealed D() {} // overrides A.D, subclasses cannot override
// (but can shadow)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3200 次 |
| 最近记录: |