覆盖密封有效,但为什么不在C#中虚拟密封?
下面的代码段是有效的覆盖密封有效,但为什么不在C#中虚拟密封?,c#,.net,oop,C#,.net,Oop,下面的代码段是有效的 public class BaseClass { public virtual void Display() { Console.WriteLine("Virtual method"); } } public class DerivedClass : BaseClass { public override sealed void Display() { Console.WriteLine("Sealed metho
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");
}
}
已编辑
实际上我正在读这篇文章。所以我是按照作者的指示做的。突然,我试着与基类玩密封的概念。这就是我提出这个问题的原因。密封:
您还可以对以下方法或属性使用密封修饰符:
重写基类中的虚拟方法或属性。这使得
您必须允许类从类派生,并防止它们
重写特定的虚拟方法或属性
覆盖:
要扩展或修改摘要或注释,需要使用覆盖修饰符
继承的方法、属性、索引器或
事件
Sealed
表示它是给定方法/类的“层次结构的结尾”。使一个方法虚拟化仅仅是说“这是默认的行为,如果你想要不同的行为,就覆盖我”和“密封的”这意味着“这永远无法覆盖”是一个悖论。我真的不确定你期望它做什么
关键字表示您不能继承它
还可以对重写基类中的虚拟方法或属性的方法或属性使用密封修饰符。这使您能够允许类从类派生,并防止它们重写特定的虚拟方法或属性
关键字意味着你可以
virtual关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。例如,此方法可以被继承它的任何类重写:
我不知道你为什么需要或想要两者
当将其应用于覆盖
时,这是有意义的。这意味着“您无法覆盖此行为”,并有效地覆盖了方法或属性上的上一个(相对于层次结构)virtual
关键字。override sealed
是有效的,因为它说“我正在覆盖基类方法,但派生类无法覆盖我。”这很有意义。其中一部分是关于它与基础阶级的关系;另一个是讨论与派生类的关系
virtual sealed
会说“你可以覆盖我(virtual
),但你不能覆盖我(sealed
)”,这毫无意义。这两个修饰符相互矛盾,适用于相同的关系。不清楚为什么您引用了文档中关于OP将其应用于方法时如何将密封的
应用于类的部分。如果您编辑答案以包含更相关的部分,则会更清楚:“您还可以对重写基类中的虚拟方法或属性的方法或属性使用密封修饰符。这使您能够允许类从类派生,并防止它们重写特定的虚拟方法或属性。”@琼斯基特:啊,很公平。谢谢你指出这一点。固定的。