微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在C#中没有System.DateTime的“日期”缩写?

如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,decimal,object或string.

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

所以我不认为我们可以合理地说,没有System.DateTime的缩写的理由是因为C中没有.C中没有字符串或十进制.

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

考虑什么是“基本”类型是有启发意义的.所有在C#中具有关键字的类型都是“非常特殊”的,除了十进制数外.也就是说,底层运行时具有为对象内置的特殊行为,显然,它是通用基础类型.字符串可能只是一个char数组,但它不是;字符串是特殊的. (因为它们可以被实体化,它们可以是不变的,它们可以存在于元数据中等等.)整数和二进制浮点类型都具有内置于其操作框架中的特殊处理.

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

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

这带来了一个有趣的点. system.intPtr和System.UIntPtr *是运行时的基本类型.它们是“指针大小整数”类型;它们是通过int和unsigned int表示的C语言.即使这些类型是.NET运行时类型系统的基础,但它们并没有获得关键字的祝福.

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

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

Hans Passant正确注意到,明确指定int的大小和范围有助于使本地整数大小更改时语言行为一致,并注意到DateTime已被设计为“未来证明”.虽然这个分析是正确的,但并不能解释为什么十进制是一个关键字.不用担心机器的“本机十进制”将来会发生变化.此外,C#语言已经注意到,尽管双倍将始终消耗8个字节的存储空间,但是并不要求C#将双精度的处理限制为仅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#不实现我喜欢的功能?”答案是:我们不需要提供不实施功能的理由.特点是昂贵的,正如雷蒙德经常指出的,认情况下没有实现.不执行未实现的功能不起作用.

特色建议根本不是不合理的;在某种意义上说,Visual Basic将DateTime作为一种特殊类型,如果我们决定这样做是值得的,C#也可以.但并不是每一个合理的功能实现.

原文地址:https://www.jb51.cc/csharp/96526.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐