为什么c中有两个关键字:字符串和字符串

本文关键字:字符串 两个 关键字 为什么 | 更新日期: 2023-09-27 18:04:26

可能重复:
字符串与C#中的字符串

我看到有两个不同的关键字(class?(,一个以大写S开头,另一个以c#中的small开头。

字符串和字符串

原因是什么?一个还不够吗?

为什么c中有两个关键字:字符串和字符串

stringSystem.String类的关键字和别名,System.String是一个类。还有比string:更多的别名

object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char

最好的答案来自Jeffrey Richter在他的著作CLR Via C#中。以下是他的3个原因:

  • 我看到许多开发人员感到困惑,不知道是否应该在代码中使用string或string。因为在C#中,字符串(a关键字(完全映射到System.String(FCL类型(,没有差异,并且可以使用任意一个。

  • 在C#中,long映射到System.Int64,但在不同的编程中语言,long可以映射到Int16或Int32。事实上,C++/CLI确实事实上将long视为Int32。某人正在阅读源代码如果他或她使用语言,很容易误解代码的意图习惯于用不同的编程语言编程。事实上大多数语言甚至不会将long视为关键字,也不会编译使用它的代码。

  • FCL有许多方法都将类型名称作为它们的一部分方法名称。例如,BinaryReader类型提供了方法例如ReadBoolean、ReadInt32、ReadSingle等,以及System.Convert类型提供了ToBoolean、ToInt32、ToInt33等方法,ToSingle等等。

string是实际类System.String的C#语言别名。

你可以安全地使用任何一种。我见过大多数人更喜欢string。如果我在API上工作,我通常会使用System.String,尽管两者都是安全的。

还有很多其他别名。例如,intSystem.Int32的别名,boolSystem.Boolean的别名。字符串示例恰好是大小写的差异,所以这个问题经常出现。

实际上,字符串只有一个关键字(所有C#关键字都是小写的(。他们的意思是一样的。不过,如果您有using System;导入,它们只能互换。

String是您正在使用的实际类。这只是另一门课,没有别的。然而,由于字符串在编程中非常重要,Microsoft决定通过创建一个关键字string将它们烘焙到该语言中,该关键字只是System.String的别名。不存在string的实例,因为它不是一个类。

这提升了字符串的地位,使它们更容易找到(想象一下,试图编写hello世界风格的编程,并且必须四处查找字符串类…(:D