Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何组织这些结构?_C#_Class_Methods_Struct_Hide - Fatal编程技术网

C# 我如何组织这些结构?

C# 我如何组织这些结构?,c#,class,methods,struct,hide,C#,Class,Methods,Struct,Hide,我有许多不同的结构,如下面所示(显然有点复杂和复杂),我想从ABC中的方法中访问私有变量和方法,同时使这些相同的变量和方法在MyMainClass之外不可见;我知道我可以通过反思来解决这个问题,但我不想走这条路。我肯定这里有人也遇到过类似的问题——你是怎么解决的 public class MyMainClass { public struct SStruct { private ulong myInternalVar; public ulong Inte

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

}

您可以将私有字段标记为内部字段,以便字段在其驻留的程序集外部不可见。

您可以将私有字段标记为内部字段,以便字段在其驻留的程序集外部不可见。

如果嵌套类型需要是
公共的,则无法实现所需的功能。与您所假装的最接近的解决方案是创建一个
内部设置器,这样它在程序集之外就不可用了。不管怎样,我不知道你想要达到什么,为什么


我的建议是,考虑到可用的小信息,可以考虑将结构实现为不可变类型(可变结构是邪恶的),然后重载构造函数来设置内部状态。这并不能解决您面临的问题,它只是对您的一般设计的一条建议。

如果嵌套类型需要是
公共的
,则无法实现您想要的功能。与您所假装的最接近的解决方案是创建一个
内部设置器,这样它在程序集之外就不可用了。不管怎样,我不知道你想要达到什么,为什么


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

因为
ssstruct
声明嵌套在
MyMainClass
中,这意味着
ssstruct
旨在支持
MyMainClass
,不可供课外使用。如果是这种情况,解决问题的最简单方法是将
结构声明为
私有
,然后使
私有
成员
公共
内部
。现在,其他类无法访问成员(因为它们根本无法访问结构),而
MyMainClass
可以

如果您在其他地方实际使用的是
ssstruct
,我建议您在任何其他类之外声明它,这样就可以清楚地知道它是以这种方式使用的


最后,您通常应该避免可变值类型。创建设置所需状态的构造函数,然后让
struct
以这种方式生存。如果您需要“修改”它,那么这样做的方法应该返回一个新创建的具有所需状态的实例。

由于
ssstruct
声明嵌套在
MyMainClass
中,这意味着
ssstruct
旨在支持
MyMainClass
,不可供课外使用。如果是这种情况,解决问题的最简单方法是将
结构声明为
私有
,然后使
私有
成员
公共
内部
。现在,其他类无法访问成员(因为它们根本无法访问结构),而
MyMainClass
可以

如果您在其他地方实际使用的是
ssstruct
,我建议您在任何其他类之外声明它,这样就可以清楚地知道它是以这种方式使用的


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

谢谢大家的评论。:)谢谢大家的评论。:)