C#中string 和String

今天忽然看到一篇文章关于string和String的,注意一个是string,另外一个是String。感受这个小细节仍是很重要的,因此就转了来。html

众所周知string是C#中System.String的别名,通常状况下两者具备相同的含义和功能,那问题时两者是彻底相同没有任何区别的吗?若是答案是“是”的话,微软为何实现了这两个概念而不是仅仅用sting或者String呢,毕竟用一个的话跟简单,给开发人员带来的困惑也更少。编程

      这个问题纯粹是概念上和理解上的问题,对您的编程技巧没有实质的帮助,若是没有兴趣的话你看到这里就能够为止了;若是您是技术大牛,彻底明白这两者的含义,您能够忽略本文也能够帮我指正错误。post

      好了,既然您继续向下看,那我也就继续说了哦J.ui

      为了使本文描述更准确,特意百度一下,下面的分析中不少是参考了搜索结果的内容,甚至是照搬了部分代码,固然我也会在相应的位置上注明引用的URL地址。url

     不废话了,直接上代码开始分析(请注意下面代码的颜色,这是我用插入代码的方式自动生成的)。spa

 string s = “Hello, World.”;
 String S = “Hello, World.”;

在含义上至关因而using string = System.String,你可使用typeof(string) == typeof(System.String)来判断;从技术上来说两者没有什么区别,正如int和Int32同样。不少编程指导原则中推荐这样的一种使用方法:当你使用对象时用string,看成类时用String,例如string s = String.Format(“Hello, {0}.”, “World”),这是微软在示例String.Format方法时的用法;而StyleCop如今强制使用C#规范的别名,也就是说使用StyleCop的话它会强制你使用string而不是Stringcode

      相似的C#别名还有:orm

 

C#别名htm

BCL全称对象

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

 

 

和string、object不一样,其余的别名都是值类型的,其中decimal是值类型但不是CLR的基础类型(primitive type)。CLR中惟一没有别名的基础类型是System.IntPtr。

有一种状况是必须使用别名而不能使用CLR全名:

 public enum Foo:Int32{} //编译错误

 public enum Bar:int{} //编译正确

还有一种状况:string是C#保留的关键字,而String是类名(不是保留关键字),也就是说若是你把String用做变量名是不会有编译错误的,而用string做变量名就会有编译错误。

 StringBuilder String = new StringBuilder(); //编译正确
 
 StringBuilder string = new StringBuilder();//编译错误

固然了,若是你非要用string做变量名的话请在string前加上@,即StringBuilder @string = new StringBuilder()这句话是编译能经过的。

还有一种状况:在反射中你只能使用String而不能使用string。

还有一种状况:在未使用using System状况下,你不能使用String而只能使用string。

最后一种状况:string是C#的保留字,而String是CLR的类型,若是其余厂商实现一种运行时来支持C#的话(刚好有没有支持String),结果就可想而知了。固然了这种状况基本上是不存在的,比彗星撞地球都概率小。

 

以上是对string和String区分的一个小总结,若是有遗漏或不正确的地方,欢迎指正。

 

转自在C#中string 和String到底有没有区别?

相关文章
相关标签/搜索