C# 防止重写C中的单个方法#

C# 防止重写C中的单个方法#,c#,inheritance,overriding,C#,Inheritance,Overriding,我知道我可以使用sealed来防止其他类继承某个类, 但允许继承但防止重写某些虚拟方法是否可行?您还可以使用sealed修饰符防止派生类进一步重写该方法 检查此项:只能覆盖虚拟方法。 只需省略virtual,您的方法将不可重写。是。sealed关键字也可以用于方法,以指示在更高继承级别上是虚拟的或抽象的方法不能进一步继承 如果这个方法从一开始就不是虚拟的或抽象的,不用担心;它不能被覆盖 请注意,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:密封改性剂是完全可以接受的。这只是一个构建继承的问题…很好的答案。考虑使用编号列表的格式设置等。看见