正在浏览.NET Framework Reference Source的 .NET源代码,只是为了它的乐趣.并找到了一些我不明白的东西.
有一个Int32.cs文件,其中包含Int32
类型的C#代码.不知怎的,这对我来说似乎很奇怪.C#编译器如何编译Int32
类型的代码?
public struct Int32: IComparable, IFormattable, IConvertible {
internal int m_value;
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这在C#中不是非法的吗?如果int
只是别名 Int32
,则无法使用错误CS0523进行编译:
'struct1'类型的struct成员'struct2字段'在struct布局中导致循环.
编译器中有一些魔法,还是我完全偏离轨道?
很长一段时间我以为我明白了,我打算创建一些谜题来学习一些关于c#中运算符优先级主题的"学生".但结果是我仍然没有做对.
谜题:这里的输出是什么?
int a = 0;
int x = --a + a++;
Console.WriteLine(x);
Console.WriteLine(a);
Run Code Online (Sandbox Code Playgroud)
输出:
-2 0
一切都清楚了,我期待这一点
接下来,问题一:
int b = 0;
int y = b-- + b++;
Console.WriteLine(y);
Console.WriteLine(b);
Run Code Online (Sandbox Code Playgroud)
输出:
-1 0
好吧,在这里我也期望y为-2 ......现在我正在尝试应用运算符优先级规则和评估顺序,并且不确定我是否自己解释过.今天再次阅读这篇文章几次,但仍然不太明白为什么结果在这里-1?有人可以帮助评估第二个结果.为什么以及它与第一个有什么不同?