Search code examples
c#classsubclassradixderived

access base class field from derived&&subclass


I can't understand why I have access to Base class's field. I have no object of Base class, and private fields are not inherited as I know. When I try to get field "i" of class "SubDerived" with reflection, it cannot find it. please anyone explain..

using System;

    namespace tests
    {
        public class Test
        {
            static void Main()
            {
                Base.SubDerived a = new Base.SubDerived();
                a.f();

                Console.ReadLine();
            }
        }

        class Base
        {
            int i = 1;

            public class SubDerived : Base
            {
                public void f()
                {
                    Console.WriteLine(base.i);
                }
            }
        }
    }

Solution

  • SubDerived is nested,that's why it has access to private members of the parent type.If you make it like this:

    class Base
    {
       int i = 1;
    }
    public class SubDerived : Base
    {
       public void f()
       {
            Console.WriteLine(base.i);
       }
    }
    

    You won't be able to access i.You need to make it protected.