Вопрос по .net, c# – Почему в C # нет сокращения «дата» System.DateTime?

10

Такие какint, long, ushort, uint, short, так далее.

Почему нет короткой руки дляSystem.DateTime?

Это все ещеstruct.. это не сокращает это? bevacqua
EстьDate псевдоним в VB.NET (для обслуживания пользователей VB6). Нет аналогичной причины, чтобы добавить его в C #. Henk Holterman
Вероятно, на этот вопрос может ответить только Эрик Липперт. Связанный: почему нетDateTime литералы? Michael Liu
@ Майкл: Мне всегда интересно, что скажет Эрик :) bevacqua
Какой другой тип с сокращенным псевдонимом в C # не может быть напрямую назначен литеральным выражением? Anthony Pegram

Ваш Ответ

3   ответа
0

Никто другой, кроме кого-то из команды BCL / .NET, не может дать правдивый ответ, но я думаю, что это простоhistorical reasonвроде как для типовchar, float... и их "расширения" (лайкint- & GT;uint Матнион в комментарии) есть, для других нет.

Я мог бы сделать тот же вопрос для других.NET Framework type типы, потому что у нас есть сокращение дляstring в .NET, ноstring этоreference тип. Так...

Надеюсь, я объяснил.

stringError: User Rate Limit Exceeded
Error: User Rate Limit ExceededImoError: User Rate Limit ExceededhistoricalError: User Rate Limit Exceeded
27

Many types are associated with "shorthand" keywords in C#; for example, System.Int32 can also be written int and System.String can be written string. Why isn't there a shorthand for System.DateTime?

Прежде чем я отвечу на этот вопрос - или, скорее, не смогу ответить на него - давайте сначала отметим типы, которые имеют сокращение в C #. Они есть

object 
string 
sbyte byte short ushort int uint long ulong 
char 
bool 
decimal double float

Позвольте мне сначала обратиться к некоторым другим ответам.

Мистер Мэн правильно отмечает, что некоторые из этих ключевых слов взяты из C; С имеетint и довольно многословныйunsigned int, doubleи несколько других. Однако С наиболее заметно не имеетbool, long, decimal, object или жеstring.

Я думаю, что мы можем разумно сказать, что одно оправдание для включения ключевых словint а такжеchar и так далее, чтобы пользователи, знакомые с C и C ++, могли быстро работать в C #. Цель состоит в том, чтобы ключевые слова были знакомы программистам на Си, но абсолютно не было целью, чтобы эти ключевые слова имели ту же семантику, что и в Си. Например, C не определяет размер какой-либо из них, и настоятельно рекомендуетint быть "натуральным размером"; машины. C # определяет точный размер и диапазон каждого типа.

Поэтому я не думаю, что мы можем разумно сказать, что оправданиеnot с сокращением дляSystem.DateTime потому что не было ни одного в C. не былоstring или жеdecimal в Си тоже.

Джейсон отмечает, чтоDateTime не является "частью языка C #" и, следовательно, не имеет ключевого слова. Но это основательно напрашивается на вопрос! Тогда возникает вопрос: «Хорошо, так почему же DateTime не является частью языка C #?» Ответ на вопрос таким образом, который требует ответа на вопрос одинаковой сложности, называется «заданием вопроса», и этот вопрос был тщательно задан.

Поучительно рассмотреть, что является «фундаментальным» типы. Все типы, которые имеют ключевые слова в C #, являются «очень специальными». каким-то образом,except for decimal, То есть в базовую среду выполнения встроено специальное поведение дляobjectОчевидно, что это универсальный базовый тип.string мог бы быть просто массивомchar, но это не так; струны особенные. (Поскольку они могут быть интернированы, они могут быть постоянными, они могут существовать в метаданных и т. Д.) Все интегральные и двоичные типы с плавающей запятой имеют специальную обработку, встроенную в структуру для их операций.

НоSystem.Decimal это просто другой тип структуры; это 128 битов целых чисел и множество пользовательских операций. Любой может реализовать свой собственный десятичный арифметический тип, если захочет. Но "благословение"System.Decimal сделать его частью языка C # означает, что даже если его преобразования реализованы как методы, мы рассматриваем их какbuilt in conversionsне какuser-defined conversions.

Такdecimal действительно странный. Это не "фундаментальный" Тип времени выполнения, но это ключевое слово.

Это поднимает интересный момент, хотя.System.IntPtr а такжеSystem.UIntPtr * являются * основными типами среды выполнения. Это & quot; целое число указателя размера & quot; типы; это то, что С означает подint а такжеunsigned int, Хотя эти типы являются основополагающими для системы типов среды выполнения .NET, они делаютnot получить благословение с ключевым словом.

Таким образом, мы можем отклонить аргумент, что только «фундаментальный» типы получают ключевое слово. Существует неосновной тип, который получил ключевое слово, и фундаментальный тип, который не получил ключевое слово, поэтому нет взаимно-однозначного отношения между фундаментальными типами и типами, которые получили ключевое слово.

Тигран полагает, что выбор был «историческим», что является правильным, но фактически не отвечает на вопрос.

Ханс Пассант правильно отмечает, что четкое указание размера и диапазона типа int помогает согласовать поведение языка даже при изменении собственного целочисленного размера, и отмечает, чтоDateTime уже был разработан, чтобы быть "будущим". Хотя этот анализ является правильным, он не объясняет, почему десятичное число является ключевым словом. Нет опасений, что "собственный десятичный размер" машины будет меняться в будущем. Более того, язык C # уже отмечает, что, хотя double всегда будет занимать 8 байт памяти, нет требования, чтобы C # ограничивал обработку double до 64-битной точности; на самом деле программы на C # часто выполняют двойную арифметику с точностью 80 или более битов.

Я не думаю, что какой-либо из этих ответов успешно решит вопрос. Итак, вернемся к вопросу:

Many types are associated with "shorthand" keywords in C#; for example, System.Int32 can also be written int and System.String can be written string. Why isn't there a shorthand for System.DateTime?

Ответ на этот вопрос совпадает с ответом на каждый вопрос формы "Почему в C # не реализована функция, которая мне нравится?" Ответ:we are not required to provide a justification for not implementing a feature. Особенностиexpensiveи, как часто указывает Раймонд Чен,unimplemented by default, Чтобы не реализовать не реализованную функцию, не требуется никаких усилий.

Особенность предложения неunreasonable совсем; Visual Basic в некотором смысле относится кDateTime как особый тип, и C # тоже мог бы, если бы мы решили, что стоит сделать эту работу. Но не каждая разумная функция реализуется.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded bevacqua
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededboolError: User Rate Limit Exceeded<stdbool.h>Error: User Rate Limit Exceeded
1

Псевдонимы для Int32, Int64 и т. Д. В языке C # существуют, чтобы сделать этот язык перспективным. По-прежнему делать это актуальным, когда у каждого есть 256-битное ядро на настольном компьютере С целым краем рубитьreally чтобы это произошло, количество кода на C #, которое неявноassumes что int 32-битный распространен. Но на самом деле не так уж и сложно, я с удивительно небольшими усилиями переместил куски написанного мной кода из CP / M в MS-DOS, в Windows 3.x в Windows NT.

Это не проблема для DateTime. Это будущее до 10000 год. Я верю и надеюсь, что к тому времени машина понимает, что я имел в виду, а не то, что я набрал :)

Error: User Rate Limit Exceeded bevacqua
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededintError: User Rate Limit ExceededSystem.Int32Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededstringError: User Rate Limit ExceededtrueError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы