2009-08-27 3 views
2

У меня есть класс, который имеет внутренний struct/class (я решил, что, если это важно для этого, я буду использовать это), я хочу, чтобы внутренний класс был доступен из другого классы, но только построенные внешним классом. Возможно ли это?Доступ к внутренней структуре/классу в C#

Благодаря

ответ

4

Ближайший вы можете получить это internal конструктор, к сожалению. В то время как private и protected члены внешнего класса доступны для внутреннего класса, противоположное неверно.

+0

Внутренний, похоже, работает, я хотел бы иметь доступ только к внешнему классу, но это достаточно хорошо. Спасибо –

4

Почему бы не объявить внутренний интерфейс (или внутренний абстрактный класс), чтобы он не был инстанциональным, а затем частным внутренним классом, который реализует интерфейс?

Что-то вроде

using System; 
namespace test { 

    class Outer { 

     public interface IInner { 
      void SayHello(); 
     } 

     private class Inner : IInner { 
      public void SayHello() { 
       Console.WriteLine("Hello"); 
      } 
     } 

     public IInner MakeInner() { 
      return new Inner(); 
     } 

    } 

    class Program { 
     static void Main(string[] args) { 
      Outer x = new Outer(); 
      x.MakeInner().SayHello(); 
     } 
    } 
} 

В этом случае только Outer может создавать конкретные Inner объекты, в то время как другие классы должны вызывать метод MakeInner.
Обратите внимание, что таким же образом вы также применяете ограничение для классов в одной и той же сборке.

+0

+1 Немного дополнительной работы, но приятное решение в любом случае. – Thorarin

+0

Это умное решение, спасибо. –

Смежные вопросы