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

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

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 и языки имеют аналогичную встроенную поддержку для них. Таким образом, вы не можете создать свои собственные примитивы на уровне языка.