防止从第三个外部 class 实例化在其外部 class 中使用的内部 class

Preventing instantiation of an internal class used in its outer class from a third, external class

具有以下结构:

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

如何限制第三个 class 访问内部 class 构造函数:

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

如果我将 InnerClass 设为私有,我会收到 'foo' 的不一致可访问性错误,如果我也将 foo 设为私有,它自然无法从第三个 class.[=15 访问=]

是否有可能或者我应该寻找完全不同的解决方案?是否有解决此问题的结构设计模式?

试试这个:

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 是私有的,但你可以有一个 public 接口。

这可能会有帮助:

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