小编jur*_*ure的帖子

如果Int32只是int的别名,那么Int32类如何使用int?

正在浏览.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# compiler-construction internals

56
推荐指数
2
解决办法
3043
查看次数

++ - 运算符优先级拼图

很长一段时间我以为我明白了,我打算创建一些谜题来学习一些关于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?有人可以帮助评估第二个结果.为什么以及它与第一个有什么不同?

c#

7
推荐指数
2
解决办法
387
查看次数

标签 统计

c# ×2

compiler-construction ×1

internals ×1