Доступ к внутренней структуре / классу в C # - PullRequest
2 голосов
/ 27 августа 2009

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 27 августа 2009

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

Что-то вроде

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.
Обратите внимание, что таким образом вы также применяете ограничение для классов в той же сборке.

4 голосов
/ 27 августа 2009

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

...