为什么c#中有两个关键字:String和String

为什么c#中有两个关键字:String和String,c#,C#,可能重复: 我看到有两个不同的关键字(classes?),一个以大写字母S开头,另一个以小写字母c#开头 一串一串 原因是什么?一个还不够吗?string是实际类系统的C语言别名。string 你可以安全地使用任何一种。我看到大多数人更喜欢字符串。如果我在使用API,我通常会使用System.String,尽管两者都是安全的 还有很多其他的别名。例如,int是System.Int32的别名,bool是System.Boolean的别名。字符串示例恰好是大小写不同,所以这个问题经常出现。实际上,

可能重复:

我看到有两个不同的关键字(classes?),一个以大写字母S开头,另一个以小写字母c#开头

一串一串

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

string
是实际类
系统的C语言别名。string

你可以安全地使用任何一种。我看到大多数人更喜欢
字符串
。如果我在使用API,我通常会使用
System.String
,尽管两者都是安全的


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

实际上,字符串只有一个关键字(所有C#关键字都是小写的)。他们的意思是一样的。但是,如果您有
使用系统,它们只能互换导入。

string
System.string
类的关键字和别名,
System.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#》(CLR Via C#。以下是他的三个理由:

  • 我看到许多开发人员困惑不解,不知道是否应该这样做 在代码中使用字符串或字符串。因为在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、, 托辛格,等等


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


这赋予了字符串更高的地位,并使它们更容易找到(想象一下,试图编写一个hello world风格的编程,并且必须实际查找字符串类……):D

与int/Int32、bool/Boolean、double/double等相同。许多常见类型被别名为更熟悉的(C/C++)关键字。@Antony Scott:就像BoltClock说的,没有两个。一个只是一个别名<代码>字符串
仅指BCL中的
字符串
类定义。