This question already has an answer here:
Can we declare sealed method in a class
(1个答案)
去年关闭。
代码段1(编译错误)-A.M2()无法密封,因为它不是替代
代码段2(有效)
问题-如果我要在
(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