This question already has an answer here:
Can we declare sealed method in a class
                                
                                    (1个答案)
                                
                        
                                去年关闭。
            
                    

  代码段1(编译错误)-A.M2()无法密封,因为它不是替代


abstract class A
{
    public abstract void M1();

    public sealed void M2()
    {
        // Do Something
    }
}



  代码段2(有效)


abstract class A
{
    public abstract void M1();

    public virtual void M2()
    {

    }
}

class B : A
{
    public sealed override void M1()
    {

    }

    public sealed override void M2()
    {

    }
}


问题-如果我要在Abstract class本身中提供方法的实现,为什么C#不允许我将其标记为Sealed,为什么要让我在子类中覆盖它,然后将其标记为密封。我无法理解这种差异

最佳答案

Sealed关键字只能放在可覆盖的函数上。
您指定的函数未声明为虚函数,因此不可覆盖。同样,将函数声明为“虚拟”和“密封”也没有任何意义,因为密封消除了“虚拟”

只有Sealed可以与“ override”关键字一起使用,并阻止其他类覆盖函数本身。

10-01 12:30