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

时间:2011-08-04 17:17:40

标签: c#

  

可能重复:
  String vs string in C#

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

字符串和字符串

是什么原因?是不够的?

4 个答案:

答案 0 :(得分:4)

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

您可以放心使用。我见过大多数人更喜欢string。如果我正在使用API​​,我通常会使用System.String,但两者都是安全的。

还有很多其他别名。例如,intSystem.Int32的别名,bool的{​​{1}}。字符串示例恰好是一个套管差异所以这个问题出现了很多。

答案 1 :(得分:4)

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

最好的答案来自杰弗里里希特在他的书CLR Via C#中。以下是他的3个理由:

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

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

  •   
  • FCL有很多方法都有类型名称作为其一部分   方法名称。例如,BinaryReader类型提供方法   例如ReadBoolean,ReadInt32,ReadSingle等,以及   System.Convert类型提供ToBoolean,ToInt32等方法,   ToSingle,等等。

  •   

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

这使得字符串提升状态并使它们更容易找到(想象一下尝试编写一个hello world style编程并且必须实际查看并找到String类...):D