【发布时间】:2013-04-19 21:35:13
【问题描述】:
一直在浏览.NET Framework Reference Source的.NET源代码,只是为了好玩。并发现了一些我不明白的东西。
有一个 Int32.cs 文件,其中包含 Int32 类型的 C# 代码。不知何故,这对我来说似乎很奇怪。 C# 编译器如何为Int32 类型编译代码?
public struct Int32: IComparable, IFormattable, IConvertible {
internal int m_value;
// ...
}
但这在 C# 中不是非法的吗?如果int 只是Int32 的别名,它应该无法使用Error CS0523 编译:
“struct1”类型的结构成员“struct2 field”导致结构布局出现循环。
编译器有什么魔力,还是我完全偏离了轨道?
【问题讨论】:
-
我认为到目前为止的答案都缺少真正的问题:“如果
Int32只是int的别名,那么 Int32 类如何使用 @987654332 @?” -
这里有一些关于完全相同的问题的很好的讨论:social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/…
-
同意@Tim。这是一个很好的问题,可能是标题中应该问的问题。法律上,我认为edit 是合适的。
-
内置类型很神奇。他们必须是 - 否则它会一直是海龟。
-
但是,您的问题的答案非常简短。编译器中是否有特殊情况允许
System.Int32具有System.Int32类型的字段,这通常是错误的?显然:是的。这个问题实际上回答了自己;通常会出现错误,对于 int 的极端特殊情况没有错误,因此编译器中必须存在特殊情况。还有。
标签: c# compiler-construction internals