Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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#中的样式并集? 在C++中有没有实现C++风格联盟的方法?我还需要将这个“联合”序列化到磁盘。_C#_Windows 8_Windows Runtime - Fatal编程技术网

如何实现C++;C#中的样式并集? 在C++中有没有实现C++风格联盟的方法?我还需要将这个“联合”序列化到磁盘。

如何实现C++;C#中的样式并集? 在C++中有没有实现C++风格联盟的方法?我还需要将这个“联合”序列化到磁盘。,c#,windows-8,windows-runtime,C#,Windows 8,Windows Runtime,在C中无法实现C风格的联合,但可以实现具有联合语义的东西 在这一点上,你真正需要问自己的问题是:你首先需要C型工会的确切原因是什么?这个问题的答案可能会引导你进入下一个问题 C风格的联合解决了一个在C环境中有意义的问题,在C环境中,内存非常稀疏,类型系统不是很严格,就像.NET一样 在C++中,你可以使用结构和属性来获得联合语义,但是你应该仔细考虑你要解决的潜在问题! 没有办法在C#中实现C风格的并集,但是可以实现具有并集语义的东西 在这一点上,你真正需要问自己的问题是:你首先需要C型工会的确切

在C中无法实现C风格的联合,但可以实现具有联合语义的东西

在这一点上,你真正需要问自己的问题是:你首先需要C型工会的确切原因是什么?这个问题的答案可能会引导你进入下一个问题

C风格的联合解决了一个在C环境中有意义的问题,在C环境中,内存非常稀疏,类型系统不是很严格,就像.NET一样


<>在C++中,你可以使用结构和属性来获得联合语义,但是你应该仔细考虑你要解决的潜在问题! 没有办法在C#中实现C风格的并集,但是可以实现具有并集语义的东西

在这一点上,你真正需要问自己的问题是:你首先需要C型工会的确切原因是什么?这个问题的答案可能会引导你进入下一个问题

C风格的联合解决了一个在C环境中有意义的问题,在C环境中,内存非常稀疏,类型系统不是很严格,就像.NET一样


<>在C++中,你可以使用结构和属性来获得联合语义,但是你应该仔细考虑你要解决的潜在问题! 您可以使用
StructLayoutAttribute
FieldOffsetAttribute
对其进行模拟:

[StructLayout(LayoutKind.Explicit)]
struct ExampleStruct
{
    [FieldOffset(0)]
    public int a;

    [FieldOffset(0)]
    public int b;

    [FieldOffset(0)]
    public int c;

    [FieldOffset(0)]
    public int d;
}
C#对他们没有直接的支持。。但这会让你更亲近。请参阅此MSDN示例:


至于你将如何去序列化它。。我自己还没有尝试过(没有必要…。

您可以使用
StructLayoutAttribute
FieldOffsetAttribute
模拟它:

[StructLayout(LayoutKind.Explicit)]
struct ExampleStruct
{
    [FieldOffset(0)]
    public int a;

    [FieldOffset(0)]
    public int b;

    [FieldOffset(0)]
    public int c;

    [FieldOffset(0)]
    public int d;
}
C#对他们没有直接的支持。。但这会让你更亲近。请参阅此MSDN示例:


至于你将如何去序列化它。。我自己还没有尝试过(没有必要……。

dynamic
可以被视为有点接近union,因为这种类型的变量可以容纳任何东西

dynamic a = 3;
a = "test";

dynamic
可以被认为有点接近于union,因为这种类型的变量可以容纳任何东西

dynamic a = 3;
a = "test";

你为什么要这么做?您可能还可以使用其他语言功能来代替哪些功能?谢谢你为什么要这么做?您可能还可以使用其他语言功能来代替哪些功能?Thx EitanBIf,你知道C++联盟是什么,你知道C,实际上没有多少解释这个代码。@威利西蒙斯,当问题被问到,OP需要解释,至少在C语言上,我猜你知道C++联盟是什么,你知道C,对这段代码没有太多的解释。OP需要解释,至少在C#上,我想我想我想在文件中存储可以是Diverenet结构类型的数据:struct ABC{[FieldOffset(0)]public Class1 Class1;public Class2 Class2;public Class3 Class3;}但是要有Class1,classI想在文件中存储可以是Diverenet结构类型的数据:struct ABC{[FieldOffset(0)]public Class1 Class1;public Class2 Class2;public Class3 Class3;}但是为了拥有Class1,Class3非常感谢,但是我试图在变量方面做一些更复杂的事情:我想将数据存储在一个文件中,可以是Diverenet结构类型:[StructLayout(LayoutKind.Explicit)]struct ABC{[FieldOffset(0)]public Class1 Class1;[FieldOffset(0)]public Class2 Class2;[FieldOffset(0)]public Class3 Class3;}但此方法适用于可以计算每个变量将占用的内存量的简单类型:(非常感谢,但是我正试图在变量方面做一些更复杂的事情:我想将数据存储在一个文件中,该文件可以是diffrenet结构类型:[StructLayout(LayoutKind.Explicit)]struct ABC{[FieldOffset(0)]public Class1 Class1;[FieldOffset(0)]public Class2 Class2;[FieldOffset(0)]public Class3 Class3;}但此方法适用于简单类型,您可以计算每个变量将占用的内存量:(