如何防止某些方法的继承?

Dr *_* TJ 8 c# oop inheritance class

如何防止派生类中某些方法或属性的继承?!


public class BaseClass : Collection   
{  
    //Some operations...  
    //Should not let derived classes inherit 'Add' method.  
}

public class DerivedClass : BaseClass      
{        
    public void DoSomething(int Item)      
    {      
        this.Add(Item); // Error: No such method should exist...      
    }      
}  
Run Code Online (Sandbox Code Playgroud)

dth*_*rpe 18

你想要的模式是组合("Has-a"),而不是继承("Is-a").BaseClass应该包含一个集合,而不是从集合继承.然后,BaseClass可以选择性地选择在其接口上公开的方法或属性.大多数可能只是调用内部集合上的等效方法的passthroughs.

在子类中标记私有内容是行不通的,因为任何具有基类型variable(Collection x = new DerivedClass())的人仍然可以通过基类型访问"隐藏"成员.

如果"Is-a"vs"Has-a"没有为您点击,请从父母与朋友的角度来考虑.您不能选择您的父母,也不能将其从您的DNA中删除,但您可以选择与您相关的人.

  • +1:喜欢"父母与朋友"的比喻:) (5认同)

Bin*_*ier 8

你不能,在这种情况下,继承是工作的错误工具.您的课程需要将该集合作为私人成员,然后您可以根据需要公开尽可能多的内容.