2015-01-06 3 views
1

Пространство имен System в .NET Framework содержит много важных типов, которые не предопределены C#, например. DateTime.Почему DateTime не является предопределенным типом?

Не могли бы вы объяснить, почему DateTime не является предопределенным типом?

+4

Что вы подразумеваете под предопределенным? Что у него нет псевдонима типа 'System.Int32' ->' int'? –

+2

Я думаю, вы имеете в виду примитивный, не предопределенный? –

+2

Мне действительно непонятно, что вы спрашиваете. Какую поддержку вы ожидаете от C# (как lanugage) для 'DateTime'? –

ответ

3

Зачем это нужно? Это не basic type, это struct of various basic types.

Включены только типы, минимально необходимые для поддержки CLR, и ничего более. Нет необходимости в том, чтобы многие типы были объявлены на уровне CLR, это только усложняет работу и делает поддержку CLR на разных платформах адской.

Поскольку тип построен поверх CLR, он может извлечь выгоду из абстракции, созданной CLR.

+0

Возможно, то же самое относится к 'string', который может быть реализован с использованием массива' char', т. Е. Как класс различных базовых типов. –

+0

@ O.R.Mapper: Правда, но с очень конкретной реализацией, я думаю, по соображениям производительности. См. [Источник] (http://referencesource.microsoft.com/#mscorlib/system/string.cs,8281103e6f23cb5c). –

+0

Несомненно, я только что проверил ILSpy перед тем, как написать свой комментарий, поэтому я написал «может быть реализован» - в любом случае конкретная реализация, похоже, не требуется спецификацией языка C#. Ключевое слово C# 'string' указано как псевдоним для класса' System.String', но ничего не упоминается о том, что этот класс должен быть «особым» каким-либо образом или, по крайней мере, не более особым, чем другие классы, которые не имеют псевдонимов ключевых слов C#, таких как «Исключение». –

3

types that have aliases (как System.Int32 ->int) являются, как вы можете видеть, также «предопределенными» в пространстве имен систем. По этой логике, DateTime предопределен, он просто не имеет псевдонима.

2

Потому что это не в спецификации языка:

4.1 Типы значений

[...] C# предоставляет набор предопределенных типов структуры называются простыми типами. Простые типы идентифицируются с помощью зарезервированных слов.

  • простой тип:
    • числовой тип
    • BOOL
  • числовой тип:
    • интегрального типа
    • с плавающей точкой типа
    • десятичного

Что касается "почему", вам нужен один из дизайнеров языка. Зачем вам это ожидать? Почему DateTime, но не Point?

+2

Мое предположение всегда было «потому что оно состояло из нескольких разрозненных компонентов, поэтому не является примитивным», но я думаю, вы могли бы сделать этот аргумент о том, что строка состоит из многих символов, но я думаю, что предположение разумно? – PhillipH

+0

Любое объяснение может быть разумным, но ОП не дал никаких результатов, поэтому мы не можем правильно ответить на это. Итак, мой вопрос к OP: что он думает о предопределенном типе, что он от него ожидает и почему «DateTime» будет одним? – CodeCaster

Смежные вопросы