为什么 `Int32` 在其源代码中使用 `int`?
Why does `Int32` use `int` in its source code?
为什么 Int32
在其 source code 中使用 int
? Int32
在 C# 中不等于 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);
...
}
Boolean
和 bool
之间也存在同样的问题。
int
、bool
等分别是 Int32
和 Boolean
等内置类型的简单别名。它们是 shorthand,因此使用它们是有意义的。即使在他们自己的定义中。
别名内置于编译器中,因此不会出现 "chicken and egg" 必须先编译 Int32
才能访问 int
的情况。 int
没有 "original source code"。 "source" 用于 Int32
并在 CLR 内置功能(用于处理基元)和框架(用于定义操作这些基元的功能)之间共享。由于 this answer to a duplicate question explains,Int32
的来源不是类型本身的有效定义;那是内置在 CLR 中的。因此,编译器必须在该文件中捏造通常非法使用 int
以允许 Int32
类型具有功能。
为什么 Int32
在其 source code 中使用 int
? Int32
在 C# 中不等于 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);
...
}
Boolean
和 bool
之间也存在同样的问题。
int
、bool
等分别是 Int32
和 Boolean
等内置类型的简单别名。它们是 shorthand,因此使用它们是有意义的。即使在他们自己的定义中。
别名内置于编译器中,因此不会出现 "chicken and egg" 必须先编译 Int32
才能访问 int
的情况。 int
没有 "original source code"。 "source" 用于 Int32
并在 CLR 内置功能(用于处理基元)和框架(用于定义操作这些基元的功能)之间共享。由于 this answer to a duplicate question explains,Int32
的来源不是类型本身的有效定义;那是内置在 CLR 中的。因此,编译器必须在该文件中捏造通常非法使用 int
以允许 Int32
类型具有功能。