【问题标题】:Forbid overriding of a method in a derived class禁止重写派生类中的方法
【发布时间】:2013-06-20 13:41:56
【问题描述】:

这是我的班级,我不希望在子班级中重写此方法,我该如何完成此行为?

class A 
{ 
   public virtual void demo() 
   { 
   } 
} 

class B : A 
{ 
   public override void demo() 
   { 
   } 
} 

// when Class B be inherited in C, methods can be overridden further, 
// but I don't want the method to be overridden further.
class C : B 
{ 

}

【问题讨论】:

  • 你要制作这个方法sealed 吗?

标签: c# .net inheritance overriding


【解决方案1】:

您只需要sealed 修饰符:

public sealed override void demo() 
{ 
    // Whatever implementation
} 

(当然,我假设它通常是一个符合 .NET 约定的名称。)

如果你想防止方法被重写而不自己改变行为,你需要重写它但显式调用之前的行为:

public sealed override void demo() 
{ 
    base.demo();
} 

请注意,当应用于方法(或属性)时,sealed 只能override 一起应用。

【讨论】:

    【解决方案2】:

    将'sealed'修饰符放在override void demo()之前

    class A 
    { 
        public virtual void demo() 
        { 
        } 
    } 
    
    class B:A 
    { 
        public sealed override void demo() 
        { 
        } 
    } 
    
    //B can be inherited in C but demo() method can not be overriden further 
    class C:B 
    { 
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多