Search code examples
c#inheritanceaccess-rights

C#: access right due to inheritance


Below is a simple testing code:

public class A
{
    protected int m = 0;
}

internal class B: A
{
    public void test(A objA, B objB)
    {
        base.m++; //OK!
        objA.m++; //cannot access protected member

        m++;      //OK!
        objB.m++; //OK!
    }
}

May I ask, why in method B.testA(), it's OK to access base.m (here base is class A), but cannot access objA.m?


Solution

  • That's how the protected modifier is implemented. You can access it from the class itself or derived classes but you cannot access it if you have an instance of the object. You will have to make it public if you want it to be accessible given an instance of the class. Another possibility is to make it protected internal meaning that it will be public for all types within the current assembly and protected for types in other assemblies.