我有许多不同的结构,如下所示(显然更复杂一些),我想从ABC内的方法中访问私有变量和方法,同时使MyMainClass类外部的相同变量和方法不可见;我知道我可以用反射解决这个问题,但我宁愿不去那条路。我相信这里有人有类似的问题 - 你是怎么解决它的?
public class MyMainClass {
public struct SStruct {
private ulong myInternalVar;
public ulong InternalVar{ get{ return myInternalVar; } }
}
public void ABC() {
SStruct val1=new SStruct();
val1.gElementID=101;
}
}
答案 0 :(得分:3)
由于SStruct
被声明嵌套在MyMainClass
中,所以暗示(至少每当我看到类似内容时)SStruct
旨在支持MyMainClass
,而不是被外面的课程使用。如果是这种情况,最容易解决问题的方法是将struct
声明为private
,然后让private
成员public
或internal
。现在,其他类无法访问成员(因为他们根本无法访问结构),MyMainClass
可以。
如果您实际上在其他地方使用SStruct
,我建议在任何其他类之外声明它,以便很明显它意味着以这种方式使用。
最后,您应该只是避免使用可变值类型。创建设置所需状态的构造函数,然后让struct
以这种方式生活。如果您需要“更改”它,那么执行此操作的方法应返回具有所需状态的新创建的实例。
答案 1 :(得分:1)
您可以将私有字段标记为内部字段,以便字段在它们所在的程序集之外不可见。
答案 2 :(得分:0)
如果嵌套类型需要public
,则无法实现所需。最接近你假装的解决方案是创建一个internal
setter,这样它就不会在程序集之外可用。无论如何,我不确定你想要实现的目标和原因。
我的建议,可用的信息很少,将考虑将结构实现为不可变类型(可变结构是邪恶的),然后重载构造函数以设置内部状态。这不会解决您面临的问题,这只是对您的总体设计的建议。