2016-05-26 3 views
0

У меня есть класс в папке в моем пространстве имен, как:Доступ к/Использование вложенных классов из других классов C#

using System; 

namespace mynamespace.myFolder1 
{ 
    public class F1 
    { 
     // class properties... 
     // class methods... 

     public class F1_Nest 
     { 
      // class properties... 
      // class methods... 
     } 
} 

Теперь у меня есть доступ к классу F1_Nest, как из:

using System; 
using mynamespace.myFolder1; 

namespace mynamespace.myFolder2 
{ 
    public class F2 
    { 
     // class properties... 
     // class methods... 

     // I have to access nested class F1_Nest here... 
    } 
} 

Как будет Я использую/access class F1_Nest внутри класса F2?

+3

Вложенные классы доступны только через имя родителя: 'F1.F1_Nest ' – poke

ответ

1

Вложенный класс так же, как обычный класс, за исключением того, что это определение находится в пределах содержащего класса. Результат состоит в том, что содержащий класс почти похож на пространство имен для вложенного класса. Вам не нужно создавать экземпляр класса, чтобы использовать вложенный класс. Например:

namespace MyNamespace 
{ 
    public class MyParentClass 
    { 
     public class MyNestedClass 
     { 

     } 
    } 
} 

Теперь вы можете создать его экземпляр где-то вроде этого:

MyNamespace.MyParentClass.MyNestedClass x = 
    new MyNamespace.MyParentClass.MyNestedClass(); 

Цель этого, как пространство имен, для организации. Это зависит от вас как дизайнера, независимо от того, используете ли вы вложенные классы вместо плоской структуры классов, но это может быть удобно, если у вас есть класс, значение, определение или использование которого неразрывно связаны с другим классом и не имеют любая релевантность или значение за пределами этого класса.

Например, представьте, у вас есть Widget класс, который имеет свойство ID, что это больше, чем просто простой int или Guid ... Вы можете иметь WidgetID перечисление, например, которые могут проживать в качестве вложенного класса в Widget.

0

Для доступа к вложенным классам вам нужно сделать следующее:

using System; 
using mynamespace.myFolder1; 

namespace mynamespace.myFolder2 
{ 
    public class F2 
    { 
     // class properties... 
     // class methods... 

     void SomeMethod() 
     { 
      // no need to instantiate an object of F1 class 
      var f1Nest = new F1.F1_Nest(); 
     } 
    } 
} 
+0

Боковое примечание к стилю: пожалуйста, ознакомьтесь с http://meta.stackoverflow.com/questions/260776/should-i-remove-fluff-when-editing-questions и подумайте,« Если это поможет », значительно улучшить качество ответ. –

0

Вложенный класс F1_Nest можно получить в классе F2 как:

using System; 
using mynamespace.myFolder1; 

namespace mynamespace.myFolder2 
{ 
    public class F2 
    { 
     // class properties... 
     // class methods... 

     // I have to access nested class F1_Nest here... 
     void F2_Method() 
     { 
     F1.F1_Nest(); 
     } 
    } 
} 
0

Объявляем объект F1_Nest следующим

F1.F1_Nest objYourObjectVariableName=new F1.F1_Nest(); 
Смежные вопросы