繁体   English   中英

使用与班级成员密封的运算符

[英]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不能覆盖BMyMethod ,而仍然允许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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM