Search code examples
c#protected-resource

Error: Inaccessible due to its protection level


This is an example from MSDN which is from the portion explaining 'protected'member access modifier. My question is, why I am getting compile error, if I modifying this program like in Example II,

Example I

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        b.x = 10;
    }
}

Example II

class A
{
    protected int x = 123;
}

//MODIFICATION IN BELOW 2 LINES
class B : A{}
class program
{
    static void Main()
    {
        A a = new A();
        B b = new B();

        b.x = 10;
    }
}

Compiler Error for Example II :

d:\MyProgs>csc _13protected.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

_13protected.cs(14,15): error CS0122: 'A.x' is inaccessible due to its
        protection level
_13protected.cs(3,23): (Location of symbol related to previous error)

d:\MyProgs>

Solution

  • protected means it's not visible outside of the class itself, only in the class itself or derived classes.

    In your first example it works because your main method is part of the derived class.

    In your second example, your are trying to access a protected member outside of its class, which is not possible. If you want to make this possible, x should be declared public.

    See http://msdn.microsoft.com/en-us/library/bcd5672a.aspx for more information about what protected means.