2015-03-03 53 views
0

我知道在另一個類中嵌套類並不是一個好習慣,但以下僅僅是爲了好玩。無法訪問類之外的嵌套類

我有以下代碼

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

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

我能夠創建Class 1的對象,但不是類class2,爲何如此? 有什麼辦法來訪問Class1的

回答

5

我能夠創建Class 1的對象,但不是等級2,爲什麼這麼外面的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

哦,不知道由嵌套類在其他一些類內部將使它私人,我認爲類將永遠是內部或公共的,無論他們在哪裏宣佈....謝謝 – Pankaj 2015-03-03 08:27:16

0

因爲嵌套class是私人的。你可以訪問它,如果你使它internalpublic

class Class1 
{ 
    internal class Class2 : Class1 
    { 

    } 
} 

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

將您的「class2」更改爲internal或public。然後你將可以通過「SomeOtherClass」訪問「class2」。但請注意,「Class1」也不應該是私有的或受保護的(class1和SomeOtherClass不是派生類)。

你必須瞭解訪問修飾符的概念(封裝)在OOP

請參考以下鏈接。 What is the difference between Public, Private, Protected, and Nothing?