无法访问类外的嵌套类

时间:2015-03-03 08:20:54

标签: c# class nested-class

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

我有以下代码

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

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

我能够创建class1的对象但不能创建class2的对象,为什么呢? 有没有办法访问class1

之外的class2

3 个答案:

答案 0 :(得分:5)

  

我能够创建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();
    }
}

答案 1 :(得分:1)

将“class2”更改为internal或public。然后,您将能够通过“SomeOtherClass”访问“class2”。但要记住“Class1”也不应该是private或Protected(class1和SomeOtherClass不是派生类)。

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

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

答案 2 :(得分:0)

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

class Class1
{
    internal class Class2 : Class1
    {

    }
}

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