cur*_*Boy 7 c# oop inheritance
我有3个级别的课程。
TopClass MiddleClass BottomClass并且MiddleClass源自TopClass且BottomClass源自MiddleClass。
我想要一个TopClass只能从 访问TopClass而MiddleClass不能访问的属性BottomClass。
由于我使用访问修饰符,因此可以从 访问受protected保护的属性。TopClassBottomClass
这是我的课程,可以提供更好的见解。
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!";
}
}
Run Code Online (Sandbox Code Playgroud)
我希望ThisIsOnlyAccessibleForTopClassAndMiddleClass 只能从MiddleClass和访问TopClass,而不是从BottomClass.
我怎样才能做到这一点?由于我无法使用现有的访问修饰符(例如、 、protected等public)执行此操作,这是否表明我试图在这里打破某种规则?internalprivate
如果您有一个特定的 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!";
}
}
Run Code Online (Sandbox Code Playgroud)
MiddleClass如果在同一个程序集中有一个或多个类TopClass,并且所有BottomClass类都将位于另一个程序集中,则可以使用private protected。它的意思是“仅访问既是internal又是protected”的类,而protected internal意味着“访问是internal或protected”的类。
// 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!";
}
}
Run Code Online (Sandbox Code Playgroud)