I have 3 level classes.
TopClassMiddleClassBottomClass
And MiddleClass is derived from TopClass and BottomClass is derived from MiddleClass.
I want to have a property in TopClass which could only be accessible from TopClass and MiddleClass not the BottomClass.
As I am using protected access modifier, the protected property in TopClass is accessible from BottomClass.
Here are my classes to give better insight.
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!";
}
}
I want ThisIsOnlyAccessibleForTopClassAndMiddleClass to be only accessible from the MiddleClass and TopClass, not from BottomClass.
How can I do that? And as I cannot do this with existing access modifiers such as protected, public, internal , private etc.. is it a sign that I am trying to break some sort of rule here?