C# 是否可以将重写的方法标记为final
在C#中,是否可以将被重写的虚拟方法标记为final,以便实现者无法重写它?我该怎么做 举例说明可能更容易理解:C# 是否可以将重写的方法标记为final,c#,.net,inheritance,C#,.net,Inheritance,在C#中,是否可以将被重写的虚拟方法标记为final,以便实现者无法重写它?我该怎么做 举例说明可能更容易理解: class A { abstract void DoAction(); } class B : A { override void DoAction() { // Implements action in a way that it doesn't make // sense for children to override, e.g.
class A
{
abstract void DoAction();
}
class B : A
{
override void DoAction()
{
// Implements action in a way that it doesn't make
// sense for children to override, e.g. by setting private state
// later operations depend on
}
}
class C: B
{
// This would be a bug
override void DoAction() { }
}
有没有办法修改B以防止其他子C在编译时或运行时重写DoAction?有,使用“sealed”:
您需要“sealed”。您可以将该方法标记为
sealed
单个方法可以标记为sealed,这大致相当于在java中将方法标记为final。因此,在您的示例中,您会:
class B : A
{
override sealed void DoAction()
{
// implementation
}
}
您可以将单个方法密封起来,为什么要将类标记为密封的?您也可以在方法级别指定此修饰符…有趣的是,我从来都不知道您可以密封方法,但我从来没有理由这样做。
class A
{
public virtual void F() { }
}
class B : A
{
public sealed override void F() { }
}
class C : B
{
public override void F() { } // Compilation error - 'C.F()': cannot override
// inherited member 'B.F()' because it is sealed
}
class B : A
{
override sealed void DoAction()
{
// implementation
}
}