【问题标题】:access base class field from derived&&subclass从派生的&&子类访问基类字段
【发布时间】:2015-02-25 17:37:51
【问题描述】:

我不明白为什么我可以访问 Base 类的字段。我没有基类的对象,据我所知,私有字段没有被继承。当我尝试通过反射获取类“SubDerived”的字段“i”时,它找不到它。请任何人解释..

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);
                }
            }
        }
    }

【问题讨论】:

    标签: c# class subclass base derived


    【解决方案1】:

    SubDerived 是嵌套的,这就是为什么它可以访问父类型的private 成员。如果你这样做:

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

    您将无法访问i。您需要设置为protected

    【讨论】:

    • 那么当派生类嵌套在基类中时,私有成员会被继承吗?
    • 是的,在这里阅读更多关于嵌套类型的信息:msdn.microsoft.com/en-us/library/ms173120.aspx
    • @tamazbagdavadze 私有成员总是被继承而不管嵌套类。额外的嵌套类使您可以访问它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2020-07-28
    • 2015-05-23
    • 1970-01-01
    • 2012-04-28
    • 2021-06-21
    • 2011-05-29
    相关资源
    最近更新 更多