gpt4 book ai didi

c# - 为什么 c# 没有联合?

转载 作者:太空狗 更新时间:2023-10-30 00:17:14 26 4
gpt4 key购买 nike

我试图了解为什么 C# 没有联合背后的技术细节。我知道使用具有显式结构布局的属性机制可以解决问题,我更感兴趣的是为什么它优于普通联合构造。

最佳答案

允许联合会破坏 .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# - 为什么 c# 没有联合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3218012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com