C# 如何限制受保护成员只能从第一级子C访问#
我有三个级别的课程C# 如何限制受保护成员只能从第一级子C访问#,c#,oop,inheritance,C#,Oop,Inheritance,我有三个级别的课程 TopClass 中产阶级 BottomClass 而中产阶级是从顶级派生出来的,底层是从中产阶级派生出来的 我想在TopClass中拥有一个属性,该属性只能从TopClass和MiddleClass访问,而不能从BottomClass访问 当我使用protectedaccess修饰符时,TopClass中的protected属性可以从BottomClass访问 以下是我的课程,以提供更好的洞察力 public class TopClass { private
TopClass
中产阶级
BottomClass
中产阶级
是从顶级
派生出来的,底层
是从中产阶级
派生出来的
我想在TopClass
中拥有一个属性,该属性只能从TopClass
和MiddleClass
访问,而不能从BottomClass
访问
当我使用protected
access修饰符时,TopClass
中的protected属性可以从BottomClass
访问
以下是我的课程,以提供更好的洞察力
public class TopClass
{
private string ThisIsOnlyAccessibleForTopClass { get; set; }
protected string ThisIsOnlyAccessibleForTopClassAndMiddleClass { get; set; } // I want this to be accessible only by the MiddleClass
public string AccessibleFromEverywhere { get; set; } // this is good as it is public so accessible everywhere
public virtual void SomeWeirdFunction()
{
ThisIsOnlyAccessibleForTopClass = "I can access this here as it is grand father's private member!";
}
}
public class MiddleClass : TopClass
{
public override void SomeWeirdFunction()
{
base.ThisIsOnlyAccessibleForTopClassAndMiddleClass = "As this is a MiddleClass class, I am accessible here.. That is good!";
}
}
public class BottomClass : MiddleClass
{
public override void SomeWeirdFunction()
{
base.ThisIsOnlyAccessibleForTopClassAndMiddleClass = "I don't want this to be accessible here!";
}
}
我希望只有从中间类
和顶级
,而不是从底层
,才可以访问这一点
我该怎么做?由于我无法使用现有的访问修饰符,如受保护的
,公共的
,内部的
,私有的
等。。这是我试图打破某种规则的迹象吗?如果您有一个特定的MiddleClass
,它应该有特权访问TopClass
的成员,您可以将MiddleClass
作为嵌套类型放入TopClass
中。嵌套类型可以访问其封闭类型的所有成员
public class TopClass
{
private string ThisIsOnlyAccessibleForTopClass { get; set; }
private string ThisIsOnlyAccessibleForTopClassAndMiddleClass { get; set; } // I want this to be accessible only by the MiddleClass
public string AccessibleFromEverywhere { get; set; } // this is good as it is public so accessible everywhere
public virtual void SomeWeirdFunction()
{
ThisIsOnlyAccessibleForTopClass = "I can access this here as it is grand father's private member!";
}
public class MiddleClass : TopClass
{
public override void SomeWeirdFunction()
{
base.ThisIsOnlyAccessibleForTopClassAndMiddleClass = "As this is a MiddleClass class, I am accessible here.. That is good!";
}
}
}
public class BottomClass : TopClass.MiddleClass
{
public override void SomeWeirdFunction()
{
// compilation error:
// base.ThisIsOnlyAccessibleForTopClassAndMiddleClass = "I don't want this to be accessible here!";
}
}
如果您在与TopClass
相同的程序集中有一个或多个MiddleClass
类,并且所有BottomClass
类都将位于另一个程序集中,则可以使用私有保护的
。它表示“仅访问内部
和受保护的
”类,而受保护的内部
表示“访问内部
或受保护的
类”
你试过seal
关键字吗?这在C#中通常是不可能的。根据您试图实现的目标,可能还有其他选择,但您在这里向我们展示的抽象设计很难说。@TấnNguyên-如果您使用密封类,那么您将无法从该类继承。在这种情况下,我不能使用BottomClass进行继承。我在这里遗漏了什么吗?您是只希望中间类
能够访问该成员,还是希望顶级
的任何直接子类能够访问该成员?例如,如果我要创建类AnotherMiddleClass:TopClass
,它是否能够访问该成员?@JoeSewell-对于我现在试图解决的问题,这对我来说真的不重要。所以,如果你知道的话,就像一个工作区,我很想听听。。谢谢
// in Assembly A
public class TopClass
{
private string ThisIsOnlyAccessibleForTopClass { get; set; }
private protected string ThisIsOnlyAccessibleForTopClassAndMiddleClass { get; set; } // I want this to be accessible only by the MiddleClass
public string AccessibleFromEverywhere { get; set; } // this is good as it is public so accessible everywhere
public virtual void SomeWeirdFunction()
{
ThisIsOnlyAccessibleForTopClass = "I can access this here as it is grand father's private member!";
}
}
public class MiddleClass : TopClass
{
public override void SomeWeirdFunction()
{
base.ThisIsOnlyAccessibleForTopClassAndMiddleClass = "As this is a MiddleClass class, I am accessible here.. That is good!";
}
}
// in Assembly B, which references Assembly A
public class BottomClass : MiddleClass
{
public override void SomeWeirdFunction()
{
// compile error
// base.ThisIsOnlyAccessibleForTopClassAndMiddleClass = "I don't want this to be accessible here!";
}
}