例如int
,long
,ushort
,uint
,short
等。
为什么System.DateTime
没有简短的手?
答案 0 :(得分:27)
许多类型与"简写"相关联。 C#中的关键字;例如,
System.Int32
也可以写成int
,System.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 int
,double
以及其他几个。但最值得注意的是,C没有bool
,long
,decimal
,object
或string
。
我认为我们可以合理地说,包含关键字int
和char
等的一个理由是,熟悉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位整数和大量用户定义的运算符。任何人都可以实现自己的十进制算术类型。但是"祝福" System.Decimal
使其成为C#语言的一部分意味着即使其转化是作为方法实现的,我们也将其视为内置转化,而不是用户定义的转化< / em>的。
所以decimal
真的很奇怪。它不是一个基本的&#34;运行时的类型,但它是一个关键字。
这引出了一个有趣的观点。 System.IntPtr 和 System.UIntPtr *是运行时的基本类型。它们是&#34;指针大小的整数&#34;类型;它们是int
和unsigned 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
也可以写成int
,System.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团队的其他人之外,没有其他人可以给出真实答案,但我认为这只是历史原因,就像类型char
,float
一样。 ..和他们的“扩展”(如评论中的int
- &gt; uint
匹配),其他人没有。
我可以为其他.NET Framework type
类型提出相同的问题,因为我们在.NET中有string
的简写,但string
是引用类型。所以...
希望我能解释一下。