C#中是否有一种方法可以防止派生类继承受保护的属性?
class Base
{
protected int A { get; set; }
}
class DerivedA : Base
{
}
class DerivedB : DerivedA
{
}
我希望DerivedA能够访问属性A,但是DerivedB不应该访问。那么,是否有一种方法来限制继承等级中间的属性的继承?
发布于 2018-10-15 07:50:21
嗯,在评论中有一些有价值的信息,所以我想我最好重述一下,这样它就不会丢失。
凯文·戈斯建议使用private protected
访问修饰符。
private protected
关键字组合是一个成员访问修饰符。私有受保护成员可以通过从包含类派生的类型访问,但只能在其包含的程序集中访问。
请注意,此访问修饰符仅在c# 7.2或更高版本中可用。
虽然我同意Kevin的观点--这可能是对您的问题的直接回答,但HimBromBeere建议这个问题实际上是一个XYProblem --这意味着您在问如何实现您遇到问题的解决方案,而不是询问如何解决根本的问题。
我也同意他的观点。
菲尔多建议使用组合重于继承 --这是一个非常好的观点。仅将继承用于代码重用是错误的。请记住,派生类是基类类型的特定类型--例如,狗可以从动物派生,因为狗是特定类型的动物,但是飞机不能仅仅因为它们都有引擎而从汽车派生。
为了得到真正的潜在问题的答案,我建议你编辑你的问题,包括这个问题,而不仅仅是你正在尝试实现的当前解决方案,或者可能会问一个全新的问题。
发布于 2018-10-15 07:03:01
你应该把它封起来:
class Base
{
protected int A { get; set; }
}
class DerivedA : Base
{
protected sealed override int A { get => base.A; set => base.A = value; }
}
class DerivedB : DerivedA
{
// Attempting to override A causes compiler error.
}
在这里阅读更多信息:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/sealed
发布于 2018-10-15 07:03:25
为什么要类不继承其基类的受保护属性?你应该重新设计你的课堂模型:
class Base
{
}
class BaseA : Base
{
protected int A { get; set; }
}
class Derived : Base
{
}
class DerivedA : BaseA
{
}
https://stackoverflow.com/questions/52811154
复制相似问题