C# 使用与类成员一起密封的运算符
我在Troelsen的书中发现,操作符sealed可以用于类的成员,以保护virtual方法不受覆盖的影响C# 使用与类成员一起密封的运算符,c#,C#,我在Troelsen的书中发现,操作符sealed可以用于类的成员,以保护virtual方法不受覆盖的影响 但是,如果我不想覆盖一个虚拟的方法,那么将其设置为虚拟的又有什么意义呢?您可能会遇到这样的情况: public class A { public virtual void MyMethod() { //... } } public class B : A { public override void MyMethod() {
但是,如果我不想覆盖一个虚拟的方法,那么将其设置为虚拟的又有什么意义呢?您可能会遇到这样的情况:
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() { }
}
在本例中,如果不在
类B
中的SomeMethod
上使用sealed
关键字,类C
将能够覆盖它,因为它的原始声明是virtual
。此上下文中的sealed
关键字生成编译器错误。请参阅。我不太明白。类B和C有自己的方法副本。所以,若C将继承B(不使用sealed),那个么B中的方法并没有改变,因为它有自己的副本。“还是不?”迪玛,恐怕我不明白你的问题。B
中的方法覆盖A
中的方法,而C
中的方法(未密封)覆盖A
和B
中的方法。这就是你要问的吗?是的,谢谢。我没有注意到C继承了B,我想,它继承了A,现在一切都清楚了。