防止继承的成员访问受保护的成员

C#中是否有一种方法可以防止派生类继承受保护的属性?

class Base
{
   protected int A { get; set; }
}

class DerivedA : Base
{
}

class DerivedB : DerivedA
{
}

我想要的是让DerivedA能够访问属性A,但是DerivedB不能.那么,有没有办法在继承层次结构的中间限制属性的继承呢?

解决方法:

好吧,评论中有一些有价值的信息,所以我认为最好重述一下,以免丢失.

Kevin Gosse建议使用private protected访问修饰符.

The private protected keyword combination is a member access modifier. A private protected member is accessible by types derived from the containing class, but only within its containing assembly.

请注意,此访问修饰符仅在c#7.2或更高版本中可用.

虽然我同意凯文(Kevin)的观点,但这可能是对您问题的直接答案,但HimBromBeere建议该问题实际上是XYProblem-意味着您正在询问如何实施遇到问题的解决方案,而不是询问如何解决问题.潜在的问题.
我也同意他的看法.

Fildor建议使用composition over inheritance-这是非常好的一点.仅将继承用于代码重用是一个错误.请记住,派生类是基类类型的特定类型-例如,狗可以从动物派生,因为狗是动物的特定类型,但是飞机不能仅由于它们都具有引擎而从汽车派生.

为了获得实际潜在问题的答案,我建议您编辑问题以包括该问题,不仅包括您要实施的当前解决方案,或者可以提出全新的问题.

上一篇:java – 如何使用多态而不是instanceof? (为什么?)


下一篇:Java多态性-具体示例