Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么没有"?;日期“;C#中System.DateTime的简写形式?_C#_.net - Fatal编程技术网

为什么没有"?;日期“;C#中System.DateTime的简写形式?

为什么没有"?;日期“;C#中System.DateTime的简写形式?,c#,.net,C#,.net,例如int,long,ushort,uint,short,等等 为什么没有System.DateTime的缩写呢?C语言中的Int32、Int64等别名的存在使该语言成为未来的证明。当每个人的台式机都有一个256位的内核时,仍然让它具有相关性。为了真正做到这一点,大量的C#代码隐含地假设int为32位,这是普遍存在的。但实际上并没有那么难,我将我编写的代码块从CP/M移动到MS-DOS,再移动到Windows3.x,再移动到WindowsNT,所做的努力出人意料地少 这不是DateTime的问题

例如
int
long
ushort
uint
short
,等等


为什么没有System.DateTime的缩写呢?

C语言中的Int32、Int64等别名的存在使该语言成为未来的证明。当每个人的台式机都有一个256位的内核时,仍然让它具有相关性。为了真正做到这一点,大量的C#代码隐含地假设int为32位,这是普遍存在的。但实际上并没有那么难,我将我编写的代码块从CP/M移动到MS-DOS,再移动到Windows3.x,再移动到WindowsNT,所做的努力出人意料地少


这不是DateTime的问题。在10000年之前,它是未来的证明。我相信并希望到那时机器能理解我的意思,而不是我键入的内容:)

除了BCL/.NET团队的其他人之外,没有人能给出真实的答案,但我认为这只是历史原因,比如类型
char
float
。。。它们的“扩展”(如注释中的
int
->
uint
matnioned)是存在的,对于其他的没有

我可以对其他
.NET框架类型
类型提出同样的问题,因为我们在.NET中有
字符串
的缩写,但是
字符串
是一种引用类型。所以

希望我能得到解释

许多类型与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
让我先谈谈其他一些答案


MystereMan正确地指出,这些关键词中有几个来自C;C有
int
和相当冗长的
unsigned int
double
,以及其他一些。然而,C最显著的特点是没有
bool
long
decimal
对象
字符串

我认为我们可以合理地说,包括关键字>代码> INT/COM>和 char 等是一个理由,让熟悉C和C++的用户能够在C语言中快速地产生。这里的目的是让C程序员熟悉这些关键字,但这些关键字的语义绝对不是要与C中的相同。例如,C没有指定任何关键字的大小,并且强烈鼓励将
int
作为机器的“自然大小”。C#确实规定了每种类型的确切尺寸和范围

因此,我认为我们不能合理地说,没有
System.DateTime
速记的理由是因为C中没有。C中也没有
string
decimal

Jason指出,
DateTime
不是“C语言的一部分”,因此没有关键字。但这完全是个问题!这个问题本质上是“好吧,那么为什么DateTime不是C语言的一部分呢?”以一种需要回答同样困难的问题的方式回答一个问题被称为“乞讨问题”,这个问题已经被彻底乞讨了

考虑什么是“基本”类型是有指导意义的。在C#中包含关键字的所有类型在某种程度上都是“非常特殊的”,除了
decimal
。也就是说,底层运行时为
对象
内置了特殊的行为,因为它是通用的基本类型
string
可能只是
char
的数组,但它不是;弦是特别的。(因为它们可以是内部的,可以是常量,可以存在于元数据中,等等。)整型和二进制浮点类型都在框架中为它们的操作构建了特殊的处理

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

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

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

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

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

Hans Passant正确地指出,明确指定int的大小和范围有助于在本机整数大小发生变化时保持语言行为的一致性,并指出,
DateTime
已经被设计为“未来证明”。虽然这个分析是正确的,但它并没有解释为什么十进制是一个关键字。不必担心机器的“本机十进制大小”将来会发生变化。此外,C语言已经注意到,尽管double总是会消耗8字节的存储空间,但C语言并不要求限制processin