2015-03-03 5 views
0

Я знаю, что это не очень хорошая практика для гнездования класса внутри другого класса, но последующее просто для удовольствия.не может получить доступ к вложенному классу за пределами класса

У меня есть следующий код

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

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

Я могу создать объект class1, но не class2, почему так? Есть ли способ получить доступ к классу2 за пределами класса 1

ответ

5

Я могу создать объект класса 1, но не класса2, почему так?

Две причины:

Во-первых, Class1 неявно внутренний, в то время как Class2 неявно частное (потому что это вложенная).

Во-вторых, вы пытаетесь использовать только Class2 в области, где это не имеет значения - вам нужно будет квалифицировать ее. Это будет нормально работать:

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

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

oh не знал, что путем вложения класса внутри какого-либо другого класса сделает его приватным, я думал, что класс будет всегда внутренним или общедоступным независимо от того, где они объявлены .... Спасибо – Pankaj

0

Поскольку вложенные class являются частными. Вы можете получить к нему доступ, если вы сделаете это internal или public.

class Class1 
{ 
    internal class Class2 : Class1 
    { 

    } 
} 

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

Измените свой «класс2» на внутренний или общедоступный. Затем вы сможете получить доступ к «классу2» через «SomeOtherClass». Но имейте в виду, что «Class1» также не должен быть частным или защищенным (class1 и SomeOtherClass не производными классами).

Вы должны понять концепцию (Encapsulation) модификаторов доступа в ООП

Пожалуйста, обратитесь ссылку. What is the difference between Public, Private, Protected, and Nothing?