C# 防止重写C中的单个方法#
我知道我可以使用sealed来防止其他类继承某个类,C# 防止重写C中的单个方法#,c#,inheritance,overriding,C#,Inheritance,Overriding,我知道我可以使用sealed来防止其他类继承某个类, 但允许继承但防止重写某些虚拟方法是否可行?您还可以使用sealed修饰符防止派生类进一步重写该方法 检查此项:只能覆盖虚拟方法。 只需省略virtual,您的方法将不可重写。是。sealed关键字也可以用于方法,以指示在更高继承级别上是虚拟的或抽象的方法不能进一步继承 如果这个方法从一开始就不是虚拟的或抽象的,不用担心;它不能被覆盖 请注意,sealed只影响方法重写;方法隐藏不能以这种方式停止,因此子类仍然可以声明一个与密封方法同名和签名的
但允许继承但防止重写某些虚拟方法是否可行?您还可以使用sealed修饰符防止派生类进一步重写该方法
检查此项:只能覆盖
虚拟方法。
只需省略virtual
,您的方法将不可重写。是。sealed
关键字也可以用于方法,以指示在更高继承级别上是虚拟的或抽象的方法不能进一步继承
如果这个方法从一开始就不是虚拟的或抽象的,不用担心;它不能被覆盖
请注意,sealed
只影响方法重写;方法隐藏不能以这种方式停止,因此子类仍然可以声明一个与密封方法同名和签名的新方法。是。您需要使用sealed override来实现它。您可以通过两种方式使用sealed
关键字:
在类之前避免继承
在函数之前避免重写
若要允许继承,请不要将sealed
关键字放在类之前,并避免重写,请将sealed
放在不希望重写的函数之前。您可以通过使抽象类本身派生出sealed
关键字来处理抽象类中的方法一些东西:
abstract class DocumentTemplateBase
{
public abstract void WriteTitle();
public abstract void WriteSections();
}
abstract class DocumentTemplate : DocumentTemplateBase
{
public override sealed void WriteTitle()
{
Console.WriteLine("Project document");
}
public override sealed void WriteSections()
{
Console.WriteLine("Sections");
}
abstract public void WriteContent();
}
仍然从原始(现在已派生)抽象类派生具体类:
class Document1_FromTemplate : DocumentTemplate
{
public override void WriteTitle() //error!
{
Console.WriteLine("Project1 document");
}
“无法重写继承的成员'Dynamics.DocumentTemplate.WriteTitle()',因为它是密封的”
但是,没有什么可以阻止实施者新建它:
class Document1_FromTemplate : DocumentTemplate
{
public new void WriteTitle() //sorry! can't stop it!
{
Console.WriteLine("Project1 document");
}
错。sealed
关键字只能用于重写的方法,以防止进一步重写;这不是他想要的。嗯,这个问题没有任何意义,除非OP讨论的是虚拟方法。让我们试着对明智的问题给出明智的答案。这个答案是合理的。SLaks:密封改性剂是完全可以接受的。这只是一个构建继承的问题…很好的答案。考虑使用编号列表的格式设置等。看见