使用操作员与班级成员密封

时间:2014-05-29 16:42:19

标签: c#

我在Troelsen的书中发现,可以在班级成员上使用密封运算符来保护覆盖 方法强>

但如果我不想覆盖 虚拟方法,那么将其设为虚拟会有什么意义?

2 个答案:

答案 0 :(得分:1)

你可能会遇到这样的情况:

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覆盖{ {1}}' S?然后你可以这样做:

A

进行此更改后,您无法再覆盖public class B : A { public sealed override void MyMethod() { //... } } 中的方法。

答案 1 :(得分:1)

在此上下文中,请考虑以下示例:

public class A
{
    public virtual void SomeMethod() { }
}

public class B : A
{
    public sealed override void SomeMethod() { }
}

public class C : B
{
    public override void SomeMethod() { }
}

在此示例中,如果sealed SomeMethod class B class C未使用virtualsealed将能够覆盖它,因为它的原始声明为{{ 1}}。此上下文中的{{1}}关键字会生成编译器错误。请参阅MSDN for more information