以下代码段有效
public class BaseClass
{
public virtual void Display()
{
Console.WriteLine("Virtual method");
}
}
public class DerivedClass : BaseClass
{
public override sealed void Display()
{
Console.WriteLine("Sealed method");
}
}
但为什么不呢
public class BaseClass
{
public virtual sealed void Display()
{
Console.WriteLine("Virtual method");
}
}
已修改
其实我正在阅读这篇文章What is sealed class and sealed method?。所以我按照作者的指示。突然,我试着用基类来演奏Sealed的概念。这就是我提出这个问题的原因。
答案 0 :(得分:16)
override sealed
是有效的,因为它说"我覆盖了基类方法,但派生类不能覆盖我。"那讲得通。其中一部分是谈论与基类的关系;另一个是谈论派生类的关系。
virtual sealed
会说"你可以覆盖我(virtual
)但你无法覆盖我(sealed
)。"这是没有意义的。这两个修饰符是矛盾的和适用于相同的关系。
答案 1 :(得分:4)
密封:
您还可以在方法或属性上使用sealed修饰符 覆盖基类中的虚方法或属性。这使得 您允许类从您的类派生并阻止它们 覆盖特定的虚拟方法或属性。
覆盖:
需要使用override修饰符来扩展或修改abstract或 虚拟实现的继承方法,属性,索引器或 事件
Sealed
表示它是"层次结尾"对于给定的方法/类。制作方法virtual
只是说"这是默认行为,覆盖我如果你想要不同的行为" 和{{1} }这意味着"这不能被覆盖" 是一个悖论。
答案 2 :(得分:1)