我该如何组织这些结构?
本文关键字:结构 何组织 | 更新日期: 2023-09-27 18:02:21
我有许多不同的结构像下面(显然有点涉及和复杂),我想从ABC的方法内部访问私有变量和方法,同时使这些相同的变量和方法从外部不可见类MyMainClass;我知道我可以用Reflection来解决这个问题,但我不想走那条路。我敢肯定在座有人遇到过类似的问题——你是如何解决的?
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;
}
}
由于SStruct
被声明嵌套在MyMainClass
中,其含义(至少每当我看到类似的东西时)是SStruct
旨在支持MyMainClass
,而不是由外部类使用。如果是这种情况,最简单的解决方法是将struct
声明为private
,然后将private
成员声明为public
或internal
。现在,其他类不能访问成员(因为它们根本不能访问结构体),而MyMainClass
可以。
如果你实际上在其他地方使用SStruct
,我建议在任何其他类之外声明它,这样就很清楚它是用来这样使用的。
最后,一般应该避免使用可变值类型。创建设置所需状态的构造函数,然后让struct
以这种方式活下去。如果您需要"更改"它,那么这样做的方法应该返回一个具有所需状态的新创建实例。
可以将私有字段标记为内部字段,这样字段就不会在它们所在的程序集之外可见。
如果嵌套类型需要为public
,则无法实现您想要的效果。与您所假装的最接近的解决方案是创建internal
setter,这样它在程序集之外就不可用了。无论如何,我不知道你想达到什么目的,为什么。
我的建议是,考虑将你的结构实现为不可变的类型(可变结构是邪恶的),然后重载构造函数来设置内部状态。这并不能解决你所面临的问题,它只是对你的总体设计的一个建议。