Как c # создает экземпляр абстрактного класса Array за сценой для массивов? - PullRequest
0 голосов
/ 29 мая 2019

Я имею в виду, что происходит, когда мы инициализируем этот синтаксический сахар?

var numbers = new int[] { 1, 2, 3, 4 };

1 Ответ

0 голосов
/ 29 мая 2019

Как указано в комментариях, вы можете использовать Sharplab.io , чтобы увидеть сгенерированный IL.

Я рекомендую КАК РАБОТАЮТ ИНИЦИАЛИЗАТОРЫ C # ARRAY Статья, чтобы оценить детали. В частности:

  • выделяет временный массив (чтобы убедиться, что присвоение является атомарным)
  • звонит System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array, valuetype [mscorlib]System.RuntimeFieldHandle)
  • значение, переданное вышеупомянутому методу, происходит из внутреннего класса с именем, содержащего частную вложенную структуру с именем __StaticArrayInitTypeSize=16
  • после вызова инициализированной временной переменной присваивается номерная переменная.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...