Подтвердить что ты не робот

Как примитивные типы данных, сделанные в С#?

Как работают System.float, System.int и другие типы примитивов? Я никогда не понимал, как можно создавать примитивные структуры, и мне интересно, могу ли я сделать свой собственный числовой тип.  

4b9b3361

Ответ 1

Предполагая, что мы говорим о компиляторе С#, который нацелен на Common Language Infrastructure (CLI), как это почти все, он в основном использует примитивные типы, открытые CLI.

Существует три уровня поддержки:

  • Подлинные примитивы, с их собственным представлением и инструкциями в IL
  • Числовые типы, которые компилятор С# имеет специальные знания, но которые не являются частью CLI - в основном, System.Decimal. Это также является частью системы Common Type (CTS), которая означает, что если вы создаете const decimal в С#, вы все равно можете использовать его в VB, например. Но до сих пор нет прямой поддержки ИЛ.
  • Другие числовые типы, такие как BigInteger - вы можете написать свои собственные.

Среднее основание второй пули позволяет С# иметь десятичные литералы и десятичные константы, ни одна из которых не возможна для третьей пули. Например, BigInteger не поддерживает язык, поэтому вы не можете писать:

// This isn't valid
BigInteger bigInteger = 123456789012345678901234567890;

Вместо этого вам придется анализировать строковое представление. Аналогично, вы не можете иметь const BigInteger.

(Теоретически можно было бы иметь тип с поддержкой в ​​С#, но не в CTS. Я не знаю таких типов.)

Ответ 2

Примитивные типы, такие как int и float, поддерживаются непосредственно процессором, а платформа .net и языки имеют такую ​​же встроенную поддержку для них. Таким образом, вы не можете создать свои собственные примитивы на уровне языка.