我该如何组织这些结构?

本文关键字:结构 何组织 | 更新日期: 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成员声明为publicinternal。现在,其他类不能访问成员(因为它们根本不能访问结构体),而MyMainClass可以。

如果你实际上在其他地方使用SStruct,我建议在任何其他类之外声明它,这样就很清楚它是用来这样使用的。

最后,一般应该避免使用可变值类型。创建设置所需状态的构造函数,然后让struct以这种方式活下去。如果您需要"更改"它,那么这样做的方法应该返回一个具有所需状态的新创建实例。

可以将私有字段标记为内部字段,这样字段就不会在它们所在的程序集之外可见。

如果嵌套类型需要为public,则无法实现您想要的效果。与您所假装的最接近的解决方案是创建internal setter,这样它在程序集之外就不可用了。无论如何,我不知道你想达到什么目的,为什么。

我的建议是,考虑将你的结构实现为不可变的类型(可变结构是邪恶的),然后重载构造函数来设置内部状态。这并不能解决你所面临的问题,它只是对你的总体设计的一个建议。