防止从第三个外部 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()
}
}
具有以下结构:
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()
}
}