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/