Предотвращение создания экземпляра внутреннего класса, используемого в его внешнем классе, из третьего, внешнего класса - PullRequest
0 голосов
/ 03 июля 2018

Со следующей структурой:

public class OuterClass {
   public InnerClass foo {get; private set}
   public OuterClass() {
      foo = new InnerClass()
   }
   public class InnerClass {
      sometype somevar;
      public InnerClass()
   }
}

Как доступ к внутреннему конструктору класса ограничен третьим классом так:

OuterClass outerclassinstance = new OuterClass();
outerclassinstance.foo.somevar; // allowed
OuterClass.Innerclass innerclassinstance = new Outerclass.InnerClass(); // not allowed
innerclassinstance.somevar // not allowed

Если я делаю InnerClass приватным, я получаю ошибку Inconsistent accessibility для 'foo', и если я делаю foo приватным, к ней, естественно, нельзя получить доступ из третьего класса.

Возможно ли это вообще или я должен искать совершенно другое решение? Существует ли структурный шаблон проектирования, который решает эту проблему?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Это может быть полезно:

public class OuterClass {
   public InnerClass foo {get; private set}
   public OuterClass() {
      foo = new InnerClass()
   }
   public class InnerClass {
      protected sometype somevar;
      protected InnerClass()
   }
}
0 голосов
/ 03 июля 2018

Попробуйте это:

public interface IInnerClass {
}

public class OuterClass {
   public IInnerClass foo {get; private set;}
   public OuterClass() {
      foo = new InnerClass();
   }
   private class InnerClass : IInnerClass {
      sometype somevar;
      public InnerClass(){}
   }
}

Ваш InnerClass является частным, но вы можете иметь открытый интерфейс к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...