当前位置: 首页 > 编程语言 > C#

为什么C#中没有System.DateTime的“日期”简写?分享

时间:2023-04-10 15:50:09 C#

为什么C#中System.DateTime没有“约会”简写?比如int、long、ushort、uint、short等。为什么System.DateTime没有short指针呢?许多类型都与C#中的“shorthand”关键字相关联;例如System.Int32也可以写成int,System.String也可以写成string。为什么System.DateTime没有简写?在我回答这个问题之前——或者更确切地说,没有回答这个问题——让我们首先注意C#中有速记类型。它们是对象字符串sbytebyteshortushortintuintlongulongcharbooldecimaldoublefloat我将从其他一些答案开始。MystereMan正确地指出其中几个关键字来自C;C有int和相当冗长的unsignedint、double和其他一些。然而,C最值得注意的是没有bool、long、decimal、object或string。我认为我们可以合理地说,包含关键字int和char等的原因之一是熟悉C和C++的用户可以在C#中快速高效地工作。这里的目标是让C程序员熟悉关键字,但这些关键字的目的绝不是要具有与C中相同的语义。例如,C不指定任何关键字的大小。强烈建议Int成为机器的“自然大小”。C#确实指定了每种类型的确切大小和范围。所以我认为我们不能合理地说没有System.DateTime速记的原因是因为C中没有。C中也没有字符串或小数。Jason指出DateTime不是“C#语言的一部分”,因此没有关键字。但这是一个彻底乞求的问题!问题基本上是“好吧,为什么DateTime不是C#语言的一部分?”以要求回答同样困难的问题的方式回答问题称为“乞讨问题”,并且已经被彻底乞讨了。考虑什么构成“基本”类型是有益的。除了decimal之外,C#中所有具有关键字的类型在某种程度上都是“非常特殊”的。也就是说,底层运行时具有内置到对象中的特殊行为,显然,因为它是通用基类型。字符串可能只是一个字符数组,但它不是;字符串是特殊的。(因为它们可以被实现,它们可以是常量,它们可以存在于元数据中,等等。)整数和二进制浮点类型都在框架中内置了特殊的处理操作。但是System.Decimal只是另一种结构类型;它是128位整数和大量用户定义的运算符。任何人都可以实现自己的十进制算术类型。但是System.Decimal的“祝福”使其成为C#语言的一部分,这意味着即使它的转换是作为方法实现的,我们也将它们视为内置转换,而不是用户定义的转换。十进制确实是一个奇怪的。它在运行时不是“基本”类型,但它是一个关键字。这提出了一个有趣的观点。System.IntPtr和System.UIntPtr*是运行时原始类型。它们是“指针大小的整数”类型;它们是C表示int和unsignedint。尽管这些类型是.NET运行时类型系统的基础,但它们并没有得到关键字的祝福。所以我们可以拒绝只有“基本”类型才能获取关键字的论点。有一个具有关键字的非原始类型和一个没有关键字的原始类型,因此原始类型和具有关键字的类型之间没有一对一的关系。Tigran是正确的,选择是“历史性的”,但实际上并没有回答这个问题。HansPassant正确地指出,明确指定int的大小和范围有助于保持语言行为的一致性,即使在本机整数大小发生变化时也是如此,并指出DateTime已被设计为“面向未来”。虽然这个分析是正确的,但它并没有解释为什么decimal被设置为关键字。毫无疑问,机器的“原始部分”将来会发生变化。此外,C#语言已经指出,虽然双精度始终会占用8个字节的存储空间,但C#不需要将双精度处理限制为仅64位精度;事实上,C#程序通常以80或更高的双精度运算结束。我认为这些答案中的任何一个都不能成功解决这个问题。那么让我们回到问题上来:C#中很多类型都与“shorthand”关键字相关联;例如System.Int32也可以写成int,System.String也可以写成string。为什么System.DateTime没有简写?这个问题的答案与“为什么C#不实现我喜欢的东西?”形式的每个问题的答案相同。答案是:我们不需要提供不实现功能的理由。功能很昂贵,而且正如RaymondChen经常指出的那样,默认情况下不会实现。将未实现的功能留在未实现的位置是没有用的。功能建议根本没有意义;VisualBasic将DateTime视为一种特殊类型,如果我们认为它值得工作,C#也会这样做。但并非所有合理的功能都已实现。C#语言有Int32、Int64等的别名,以确保语言不会过时。当每个人的台式计算机都有256位内核时,它仍然具有相关性。为了真正实现这一点,整个包边和咀嚼过程中,周围的大量C#代码隐含地假设int是32位是很常见的。但它真的没有那么难,我将我编写的代码块从CP/M移动到MS-DOS,再到Windows3.x,再到WindowsNT。这不是DateTime的问题。直到一万年前,它才具有前瞻性。我相信并希望到那时机器会理解我的意思,而不是我输入的内容:)除了BCL/.NET团队中的其他人之外,没有人可以给出真正的答案,但我认为这只是历史性的,比如char,float...和它们的“扩展”类型(如评论中的int->uintmatnioned),对于其他人则没有。对于其他.NETFramework类型类型,我可以问同样的问题,因为我们在.NET中有字符串速记,但字符串是引用类型。所以...希望我能解释一下。以上是C#学习教程:为什么C#中System.DateTime没有“date”简写?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: