【问题标题】:unable to access nested class outside class无法访问类外的嵌套类
【发布时间】:2015-03-03 08:20:53
【问题描述】:

我知道将一个类嵌套在另一个类中不是一个好习惯,但以下只是为了好玩。

我有以下代码

namespace PlayIt
{
    class Class1
    {
        class Class2 : Class1
        {
        }
    }

    class SomeOtherClass
    {
        Class1 objClass1 = new Class1();
        Class2 objClass2 = new Class2();
    }
}

我可以创建 class1 的对象,但不能创建 class2 的对象,为什么? 有什么办法可以在class1之外访问class2

【问题讨论】:

    标签: c# class nested-class


    【解决方案1】:

    我可以创建 class1 的对象,但不能创建 class2 的对象,为什么会这样?

    两个原因:

    首先,Class1 是隐式内部的,而 Class2 是隐式私有的(因为它是嵌套的)。

    其次,您尝试在没有任何意义的范围内仅使用 Class2 - 您需要对其进行限定。这会正常工作:

    namespace PlayIt
    {
        class Class1
        {
            internal class Class2 : Class1
            {
            }
        }
    
        class SomeOtherClass
        {
            Class1 objClass1 = new Class1();
            Class1.Class2 objClass2 = new Class1.Class2();
        }
    }
    

    【讨论】:

    • 哦不知道通过在其他类中嵌套类会使其私有,我认为无论在哪里声明类都将始终是内部或公共的......谢谢
    【解决方案2】:

    将您的“class2”更改为内部或公共。然后您将能够通过“SomeOtherClass”访问“class2”。但请记住,“Class1”也不应该是私有的或受保护的(class1 和 SomeOtherClass 不是派生类)。

    你必须了解OOP中访问修饰符的概念(封装)

    请参考以下链接。 What is the difference between Public, Private, Protected, and Nothing?

    【讨论】:

      【解决方案3】:

      因为嵌套的class 是私有的。如果您将其设为internalpublic,则可以访问它。

      class Class1
      {
          internal class Class2 : Class1
          {
      
          }
      }
      
      class SomeOtherClass
      {
          Class1 c1 = new Class1();
          Class1.Class2 c2 = new Class1.Class2();
      }
      

      【讨论】:

        猜你喜欢
        • 2022-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-12
        • 2017-01-25
        • 2014-10-30
        • 1970-01-01
        相关资源
        最近更新 更多