class X {
sealed protected virtual void F() {
Console.WriteLine("X.F");
}
sealed void F1();
protected virtual void F2() {
Console.WriteLine("X.F2");
}
}
在上面的代码中存在编译时错误:
X.F()' 无法密封,因为它不是覆盖
X.F1()' 无法密封,因为它不是覆盖
这是否意味着我们只能应用sealed
关键字 为什么我们必须重写一些方法?
Well, sealed关键字阻止方法被被覆盖,这就是为什么它没有意义
- with virtual声明 - 只需删除
virtual
而不是声明virtual sealed
.
- on abstract方法,因为抽象方法必须被重写
- on 非虚拟的方法,因为这些方法不能被重写
所以唯一的选择是override sealed
意思是覆盖,但最后一次:
public class A {
public virtual void SomeMethod() {;}
public virtual void SomeOtherMethod() {;}
}
public class B: A {
// Do not override this method any more
public override sealed void SomeMethod() {;}
public override void SomeOtherMethod() {;}
}
public class C: B {
// You can't override SomeMethod, since it declared as "sealed" in the base class
// public override void SomeMethod() {;}
// But you can override SomeOtherMethod() if you want
public override void SomeOtherMethod() {;}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)