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

时间:2018-07-03 09:25:40

标签: c# instantiation inner-classes

具有以下结构:

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设为私有,则会收到“ foo”的不一致的可访问性错误,并且如果我也将foo设为私有,则自然无法从第三类访问它。

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

2 个答案:

答案 0 :(得分:4)

尝试一下:

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是私有的,但是您可以对其使用公共接口。

答案 1 :(得分:0)

这可能会有所帮助:

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