为什么在C#中没有System.DateTime的“约会”速记?

时间:2012-04-07 22:25:23

标签: c# .net

例如intlongushortuintshort等。

为什么System.DateTime没有简短的手?

3 个答案:

答案 0 :(得分:27)

  

许多类型与"简写"相关联。 C#中的关键字;例如,System.Int32也可以写成intSystem.String可以写成string。为什么没有System.DateTime的简写?

在我回答这个问题之前 - 或者更确切地说,没有回答这个问题 - 让我们首先注意C#中有简写的类型。他们是

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

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

Mystere Man正确地指出,其中一些关键词来自C; C有int和相当冗长的unsigned intdouble以及其他几个。但最值得注意的是,C没有boollongdecimalobjectstring

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

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

Jason指出DateTime不是C#语言的一部分"因此没有关键字。但这是彻底乞求的问题!那个问题基本上就是"好的,那么为什么DateTime不是C#语言的一部分?"以一种需要回答同等难度问题的方式回答问题被称为“乞求问题"”,这个问题已被彻底乞讨。

考虑什么是"基础"是有益的。类型。所有在C#中都有关键字的类型都是"非常特殊"以某种方式,除了decimal 。也就是说,底层运行时具有object内置的特殊行为,显然,因为它是通用基类型。 string可能只是char的数组,但事实并非如此;字符串很特别。 (因为它们可以被实现,它们可以是常量,它们可以存在于元数据中,依此类推。)积分和二进制浮点类型都具有内置于框架中的特殊处理操作。

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

所以decimal真的很奇怪。它不是一个基本的&#34;运行时的类型,但它是一个关键字。

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

因此,我们可以拒绝只有&#34;基本&#34; types获取关键字。有一个非基本类型有一个关键字,一个基本类型没有得到一个关键字,所以基本类型和有关键字的类型之间没有一对一的关系。

Tigran认为选择是&#34;历史&#34;,这是正确的,但实际上并没有回答这个问题。

Hans Passant正确地指出,明确指定int的大小和范围有助于使语言行为保持一致,即使本机整数大小发生变化,并指出DateTime已被设计为&#34; future证明&#34 ;.虽然这种分析是正确的,但它并不能解释为什么十进制被设为关键字。不用担心&#34;原生十进制大小&#34;一台机器将来会发生变化。此外,C#语言已经注意到虽然double总是消耗8个字节的存储空间,但是没有要求C#将双精度处理限制在仅64位的精度;事实上,C#程序经常以80或更高的精度进行双重算术。

我认为这些答案中没有一个成功地解决了这个问题。所以让我们回到这个问题:

  

许多类型与&#34;简写&#34;相关联。 C#中的关键字;例如,System.Int32也可以写成intSystem.String可以写成string。为什么没有System.DateTime的简写?

这个问题的答案与表格的每个问题的答案相同&#34;为什么C#没有实现我喜欢的功能?&#34;答案是:我们不需要提供不实现功能的理由。功能昂贵,并且正如Raymond Chen经常指出的那样未实现默认情况下。将未实现的功能保留为未实现是没有用的。

功能建议根本不是不合理;在某种意义上,Visual Basic将DateTime视为特殊类型,如果我们认为值得做这项工作,C#也可以。但并非所有合理的功能都得到实施。

答案 1 :(得分:1)

C#语言中Int32,Int64等的别名可以使语言面向未来。当每个人的桌面计算机都有256位核心时,仍然要使它相关。随着整个插件的出现,并且真的使这种情况发生,那些隐含的假定 int为32位的C#代码的数量很多。但实际上并没有那么难,我把我从CP / M编写的代码块移到了MS-DOS到Windows 3.x到Windows NT,但却没那么费力。

这不是DateTime的问题。它直到万年才具有前瞻性。我相信并希望到那时机器能理解我的意思,而不是我输入的内容:)

答案 2 :(得分:0)

除了来自BCL / .NET团队的其他人之外,没有其他人可以给出真实答案,但我认为这只是历史原因,就像类型charfloat一样。 ..和他们的“扩展”(如评论中的int - &gt; uint匹配),其他人没有。

我可以为其他.NET Framework type类型提出相同的问题,因为我们在.NET中有string的简写,但string引用类型。所以...

希望我能解释一下。