Как примитивные типы данных в C#?


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

2 51

2 ответа:

предполагая, что мы говорим о компиляторе C#, который нацелен на инфраструктуру общего языка (CLI), как и почти все, он в основном использует примитивные типы, предоставляемые CLI.

есть фактически три уровня поддержки, чтобы рассмотреть:

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

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

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

вместо этого вам нужно будет разобрать строковое представление. Точно так же вы не можете иметь const BigInteger.

(теоретически можно было бы иметь тип в C#, но не в ДТОЖ. Я не знаю таких типов.)

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