Почему встроенные типы C # содержат реализацию? - PullRequest
0 голосов
/ 09 января 2019

Это известный факт, встроенные типы, такие как 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. Однако с чёрной магией компилятора все становится возможным. Но я точно не знаю.

...