Как работают System.float
, System.int
и другие типы примитивов? Я никогда не понимал, как можно создавать примитивные структуры, и мне интересно, могу ли я сделать свой собственный числовой тип.
Как примитивные типы данных, сделанные в С#?
Ответ 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 и языки имеют такую же встроенную поддержку для них. Таким образом, вы не можете создать свои собственные примитивы на уровне языка.