Это известный факт, встроенные типы, такие как Int32 / Double / ..., реализованы на уровне компилятора, и пользователи не могут реализовать рекурсивные структуры, такие как Int32
:
public readonly struct Int32 : IComparable, IConvertible, IFormattable, IComparable<int>, IEquatable<int>, ISpanFormattable
{
private readonly int m_value; // Do not rename (binary serialization)
Учитывая, что int
является псевдонимом Int32
, мы имеем неразрешимую рекурсию здесь. Но это нормально, так как он получает «особое понимание» компилятора.
Однако мне интересно, почему он вообще содержит какую-либо реализацию. Если вы посмотрите на файл , то увидите, что существует код, который, по-видимому, реально использует реальная среда выполнения.
Интересно, почему типы bultin - это не просто заглушки? Сначала я предположил, что оно может быть использовано в качестве реализации упакованного значения, но оно мне не работает, так как оно объявлено как struct
. Однако с чёрной магией компилятора все становится возможным. Но я точно не знаю.