为什么c#没有联盟?

我试图理解为什么C#没有工会的技术背景.我明白使用具有显式结构布局的属性机制可以解决问题,我更感兴趣的是为什么这比vanilla union构造更受欢迎.
最佳答案
允许工会会破坏.NET的安全性,特别是在涉及托管对象时.

例如(对于32位系统):

union MyUnion
{
    string SomeString; // just a 4 byte pointer
    uint SomeInteger;
}

MyUnion u;

u.SomeInteger = 0x98765432;
// What's u.SomeString? What happens if I try to access it?

C#允许你使用unsafe关键字和某些属性来自己射击,但从不涉及托管类型.您可能已经注意到FieldOffset不允许您将随机类型组合在一起.尝试使用上面的“联合”.

这是我得到的:

Could not load type ‘MyUnion’ from
assembly ‘ConsoleApplication2,
Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null’ because it
contains an object field at offset 0
that is incorrectly aligned or
overlapped by a non-object field.

转载注明原文:为什么c#没有联盟? - 代码日志