我该如何组织这些结构?

时间:2011-07-16 10:04:30

标签: c# class methods struct hide

我有许多不同的结构,如下所示(显然更复杂一些),我想从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;
    }

}

3 个答案:

答案 0 :(得分:3)

由于SStruct被声明嵌套在MyMainClass中,所以暗示(至少每当我看到类似内容时)SStruct旨在支持MyMainClass,而不是被外面的课程使用。如果是这种情况,最容易解决问题的方法是将struct声明为private,然后让private成员publicinternal 。现在,其他类无法访问成员(因为他们根本无法访问结构),MyMainClass可以。

如果您实际上在其他地方使用SStruct,我建议在任何其他类之外声明它,以便很明显它意味着以这种方式使用。

最后,您应该只是避免使用可变值类型。创建设置所需状态的构造函数,然后让struct以这种方式生活。如果您需要“更改”它,那么执行此操作的方法应返回具有所需状态的新创建的实例。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果嵌套类型需要public,则无法实现所需。最接近你假装的解决方案是创建一个internal setter,这样它就不会在程序集之外可用。无论如何,我不确定你想要实现的目标和原因。

我的建议,可用的信息很少,将考虑将结构实现为不可变类型(可变结构是邪恶的),然后重载构造函数以设置内部状态。这不会解决您面临的问题,这只是对您的总体设计的建议。