gpt4 book ai didi

c# - 为什么 C# 中没有 System.DateTime 的 "date"简写?

转载 作者:可可西里 更新时间:2023-11-01 08:53:49 26 4
gpt4 key购买 nike

int , long , ushort , uint , short , 等等。

为什么没有 System.DateTime 的简写?

最佳答案

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

让我先谈谈其他一些答案。

Mystere Man 正确地指出这些关键字中有几个来自 C; C有 int和相当罗嗦的 unsigned int , double ,以及其他一些。然而C最值得注意的是没有 bool , long , decimal , objectstring .

我认为我们可以合理地说包含关键字 int 的一个理由。和 char等等,以便熟悉 C 和 C++ 的用户可以在 C# 中快速高效地工作。这里的目的是让 C 程序员熟悉关键字,但绝对不是为了让这些关键字具有与 C 中相同的语义。例如,C 没有指定其中任何一个的大小,以及强烈鼓励 int成为机器的“自然尺寸”。 C# 确实指定了每种类型的确切大小和范围。

所以我认为我们不能合理地说没有 System.DateTime 的简写的理由。是因为 C 中没有。没有 stringdecimal在 C 中。

Jason 注意到 DateTime不是“C# 语言的一部分”,因此没有关键字。但这完全是在问这个问题!问题本质上是“好的,那么为什么 DateTime 不是 C# 语言的一部分?”以需要同等难度的问题来回答的方式来回答问题被称为“乞求问题”,并且这个问题已经被彻底乞求。

考虑什么是“基本”类型是有益的。除了 decimal 之外,C# 中所有带有关键字的类型在某种程度上都是“非常特殊的”。 .也就是说,底层运行时为 object 内置了特殊的行为。 ,显然,因为它是通用基类型。 string可能只是一个 char 的数组,但事实并非如此;字符串是特殊的。 (因为它们可以被实习,它们可以是常量,它们可以存在于元数据中,等等。)整型和二进制浮点类型都具有内置到框架中的特殊处理以用于其操作。

但是 System.Decimal只是另一种结构类型;它是 128 位整数和大量用户定义的运算符。如果愿意,任何人都可以实现自己的十进制算术类型。而是“福” System.Decimal通过使其成为 C# 语言的一部分意味着即使它的转换是作为方法实现的,我们也将它们视为内置转换,而不是用户定义的转换。

所以 decimal真的很奇怪。它不是运行时的“基本”类型,而是一个关键字。

不过,这提出了一个有趣的观点。 System.IntPtr 和 System.UIntPtr *是*运行时的基本类型。它们是“指针大小的整数”类型;它们就是 C 的意思 intunsigned int .尽管这些类型是 .NET 运行时类型系统的基础,但它们并没有得到关键字的祝福。

因此,我们可以拒绝只有“基本”类型才能获得关键字的论点。存在获得关键字的非基本类型和未获得关键字的基本类型,因此基本类型和获得关键字的类型之间没有一对一的关系。

Tigran 认为这些选择是“历史性的”,这是正确的,但实际上并没有回答这个问题。

Hans Passant 正确地指出,即使 native 整数大小发生变化,明确指定 int 的大小和范围也有助于使语言行为保持一致,并指出 DateTime已经被设计为“面向 future ”。尽管这种分析是正确的,但它并没有解释为什么将小数设为关键字。不用担心机器的“ native 十进制大小”将来会发生变化。此外,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# 没有实现我喜欢的特性?”形式的每个问题的答案相同。答案是: 我们不需要提供不实现功能的理由。 功能很昂贵,而且正如 Raymond Chen 经常指出的那样,默认情况下未实现。让未实现的功能未实现无需任何工作。

功能建议一点也不无道理; Visual Basic 在某种意义上对待 DateTime作为一种特殊类型,如果我们认为值得做这项工作,C# 也可以。但并非所有合理的功能都得到了实现。

关于c# - 为什么 C# 中没有 System.DateTime 的 "date"简写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10058883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com