为什么`Int32`在源代码中使用`int`?

6
为什么在 Int32源代码中使用了 int?在 C# 中 Int32 等同于 int,所以 int 的原始源代码是什么?我很糊涂。
[Serializable]
[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)] 
[System.Runtime.InteropServices.ComVisible(true)]
#if GENERICS_WORK
    public struct Int32 : IComparable, IFormattable, IConvertible
        , IComparable<Int32>, IEquatable<Int32>
///     , IArithmetic<Int32>
#else
    public struct Int32 : IComparable, IFormattable, IConvertible
#endif
    {
        internal int m_value; // Here????

        public const int MaxValue = 0x7fffffff;
        public const int MinValue = unchecked((int)0x80000000);

        ...
    }

Booleanbool之间也存在相同的问题。


Int32是一个结构体。它包含用于操作int的方法和其他内容,int是系统定义的数据类型。 - Amit Kumar Ghosh
就是int的原始源代码。一些实际的内部工作是编译器和运行时的一部分,但就源代码而言,那就是源代码。 - user743382
1
可能是重复的:https://dev59.com/sGQo5IYBdhLWcg3wXeX5 仅相关:https://dev59.com/9mMl5IYBdhLWcg3w7qhq - Tim Schmelter
你认为为什么不需要使用int呢? - Matteo Umili
1
@TimSchmelter 绝对是重复的。找得好。 :) - user743382
1个回答

7

intbool等仅仅是内置类型(如Int32Boolean)的别名。它们是缩写形式,因此在它们自己的定义中使用它们是有意义的。

这些别名已内置于编译器中,因此不存在必须先编译Int32才能访问int的“鸡生蛋”情况。对于int没有“原始源代码”。源代码是针对Int32的,并且在CLR(用于处理基元的功能)和框架(用于定义操作这些基元的功能)内置功能之间共享。正如这个重复问题的答案所解释的那样Int32的源代码并不是该类型本身的有效定义;这是内置于CLR中的。因此,编译器必须伪造通常非法的在该文件中使用int的情况,以允许Int32类型具有功能性。


1
Int32会“递归”地包含自身吗? - Matteo Umili
5
这并没有回答问题。 - user743382
@codroipo,int不是编译器关键字的别名,而是System.Int32的别名。 - David Arno
2
@DavidArno 在我发表评论后进行了重大编辑(可以从评论时间和编辑时间验证)。您现在确实回答了问题。虽然不如链接问题中的Eric Lippert回答得好,但比以前要好得多。 - user743382
一般来说,不要指望这种情况会发生。当人们对一个糟糕的答案进行投票后,即使你进行了编辑,他们也可能已经转向其他问题,因此无法再看到它。但在这里,没问题,好的。 :) - user743382
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接