c# - 为什么 C# 中的类没有循环布局问题?

标签 c# class struct circular-dependency cyclic-reference

public struct Unit
{
    Unit u;
}

Causes:

Struct member 'Unit.u' of type 'Unit' causes a cycle in the struct layout.

但是

public class Unit
{
    Unit u;
}

编译。我明白我想的问题。引用一个Unit对象时会形成一个无限循环,因为它必须初始化另一个成员Unit等等。但是为什么编译器只针对 structs 限制这个问题呢? class 的问题是否也存在?我错过了什么吗?

最佳答案

问题在于布局

Unit 是一个结构时,Unit 的任何值都必须包含另一个相同类型(因此大小相同)的值,无穷无尽。这不可能。我想您可能会争辩说,如果没有其他字段,Unit 的字段应该不占用内存,因此您可以将它包含在自身中 - 但我相信 CLR 的方式works 确保所有结构至少占用 1 个字节...

Unit 是一个类时,Unit 对象只需要包含对另一个 Unit 对象的引用 .没有存储问题,开始时该值可以为 null。

这样想:你不可能拥有一栋房子,其中包含另一栋根据相同蓝图 build 的房子,但你肯定可以拥有一栋房子,其中包含一张纸,上面有类似的房子地址...

关于c# - 为什么 C# 中的类没有循环布局问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309264/

相关文章:

c# - 如何以易于理解的通用格式表示 SQL 查询?

c# - Web 应用程序无法启动 : iisexpress. exe 已退出,代码为 0

C# 将 JSON 反序列化为列表

c++ - 有没有办法在类c++中取消初始化变量

delphi - 为什么 Delphi 中的类不能使用运算符重载?

c# - 如何初始化 Task<List<string>> 参数?

php - 多次调用一个方法,是否有更有效的方法?

c++ - 如何从多个结构变量(永久存储)的临时结构变量传递变量

c - 32 位系统中的结构填充

c - 带有指向结构节点的指针的动态数组