Основное различие между встроенными типами данных и пользовательскими типами данных заключается в том, что: встроенные типы данных могут принимать литеральные значения (значения, вставленные непосредственно в код, этот процесс также называется жестким кодированием).
Таким образом, возможно создать пользовательский тип данных, такой же как логический, который принимает три значения:
да / нет / возможно без использования перечислений.
такой как следующий код:
MyCustomBoolean a = maybe;
Я задал вопрос выше, потому что я хочу понять, что встроенные типы данных в C # проинструктированы в Core Language (например, C ++ int, char …) или нет?
—Обновить—
по второму вопросу позвольте мне задать вопрос, чтобы прояснить второй вопрос:
Я знаю, что, например, строка является псевдонимом System.String, но работает ли чистая строка в C # без System.String?
Нет способов сделать это именно так, как вы просили. Однако вы можете создать постоянные поля в C #, который может достичь этого результата (именованные значения), но только с интегральные типы или строки — другими словами, вещи, которые вы уже можете использовать для констант времени компиляции. Это может быть особенно полезно в противном случае Волшебные Ценности.
public const string Maybe = "Maybe";
public const int Maybe = 0;
Один из способов обойти это, хотя он не будет использоваться в качестве истинной константы, — это инициализировать static только для чтения поля или свойства. Например
public static readonly MyCustomBoolean Maybe { get { return new MycustomBoolean(); } }
public static MyCustomBoolean Maybe = new MyCustomBoolean();
Для этого конкретного случая вы можете использовать обнуляемый тип bool.
С типичными операциями, такими как:
bool? b = null
if (b.HasValue)
if (b.Value)
b = true
Где может быть ноль, или с HasValue == false
,
Литералы являются особенностью языка C #. Вы не можете создавать новые литералы.
Возможно, вас заинтересует другой язык программирования, например Nemerle, который позволяет создавать пользовательские литералы, такие как этот XML-литерал:
https://github.com/rsdn/nemerle/wiki/XML-literals
Перечисления и константы обычно заполняют пустоту для C #. Для более сложных структур вы часто видите некоторую разновидность свободного API.
Конечно, мы видим, что отсутствие этой функции в C # означало, что обеспечение естественного способа определения запросов означало изменение спецификации языка C # для поддержки LINQ. Если бы у C # были такие же возможности метапрограммирования, как у Nemerle, они могли бы достичь тех же целей, что и LINQ, без изменения синтаксиса языка.