none
C#中,String与string的区别 RRS feed

  • 问题

  • 再新建一个类的时候,需要定义字符串型的私有成员,看到别人写的src中有的人使用String,有的人使用string,不知道这两种定义的区别是什么,String型会有更多的功能么?
    2009年9月14日 3:00

答案

全部回复

  • 你好 它们是相同的 string是String类的别名
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    • 已标记为答案 HunterFeng 2009年9月14日 3:11
    2009年9月14日 3:02
    版主
  • 都是一样的,同样的还有 int - int32, long-int64 等,
    知识改变命运,奋斗成就人生!
    • 已标记为答案 HunterFeng 2009年9月14日 3:11
    2009年9月14日 3:05
    版主
  • 你好,使用效果上是一样的,String是.NET类库中String类,string是C#语言的关键字,编译的时候,转换为String类的对象。

    jon.valett@gmail.com
    • 已标记为答案 HunterFeng 2009年9月14日 3:31
    2009年9月14日 3:11
    版主
  • 只能说在使用上相同,string 会编译成大写的 FCL 的 String 的说法是不对的。应该说 string 的实例/静态方法调用会编译成 String 类的实例/静态方法调用。而 string 本身在 IL 当中就是一个基元类型 (primitive type),它不会编译成 FCL 的 String 类。同样,int 对应于 IL 中的 int32,FCL 中的 System.Int32。

    详细信息,请参考 Dixin (MSFT) 的 Blog 文章。http://www.cnblogs.com/dixin/archive/2007/12/20/1006451.html (英文)。
    Mark Zhou
    2009年9月14日 5:31
  • 只能说在使用上相同,string 会编译成大写的 FCL 的 String 的说法是不对的。应该说 string 的实例/静态方法调用会编译成 String 类的实例/静态方法调用。而 string 本身在 IL 当中就是一个基元类型 (primitive type),它不会编译成 FCL 的 String 类。同样,int 对应于 IL 中的 int32,FCL 中的 System.Int32。

    详细信息,请参考 Dixin (MSFT) 的 Blog 文章。http://www.cnblogs.com/dixin/archive/2007/12/20/1006451.html  (英文)。
    Mark Zhou
    编译成String的说法的确不准确,并没有编译成String,在IL中,string是一个基元类型,我们可以看看如下的代码对比:
    1,使用大写的String
            static void Main(string[] args)
            {
                String s = "aaa";             

            }
    对应的IL代码是:
    .method private hidebysig static void  Main(string[] args) cil managed
    {
      .entrypoint
      // 代码大小       8 (0x8)
      .maxstack  1
      .locals init ([0] string s)
      IL_0000:  nop
      IL_0001:  ldstr      "aaa"
      IL_0006:  stloc.0
      IL_0007:  ret
    } // end of method Program::Main


    2,使用小写的string
            static void Main(string[] args)
            {
                string s = "aaa";             

            }
    对应的IL代码是:
    .method private hidebysig static void  Main(string[] args) cil managed
    {
      .entrypoint
      // 代码大小       8 (0x8)
      .maxstack  1
      .locals init ([0] string s)
      IL_0000:  nop
      IL_0001:  ldstr      "aaa"
      IL_0006:  stloc.0
      IL_0007:  ret
    } // end of method Program::Main

    生成的IL代码是一样的,都是对应基元类型string

    周雪峰
    2009年9月14日 11:35
    版主
  • 谢谢你们的回答。
    2011年6月22日 6:26