string是一个类
System.String A="12";这样没问题
System.String A=new System.String("12");这样则报语法错误,
因为没有相应的构造函数。
那么System.String A="12";这个是怎么实现的,它的实现过程是怎么样的。
或者是操作操作符重载,把"12"作为char[]然后调用相应的构造函数去实现。
大家说说看

解决方案 »

  1.   

    A 实际已经不是 String 类了,而是 String 数据类型
      

  2.   

    String A="12";
    楼主首先要清楚String类型属于引用类型。因此上面的表达式表示创建一个String类型的变量,把等号右边的字符串对象"12"的引用传给等号左边的变量。
      

  3.   

    String A="12";
    这个表达式是引用传递,相当于以前C和C++的指针。右边的字符串是一个对象,而左边是你创建的一个接受该字符串对象引用的变量。
      

  4.   

    YYKXQ(异域狂想曲) 
    这个我也知道,A是一个引用,它指向托管堆中的一个对象实例。
    起先CLR会为它在托管堆中分配内存,再调用它的构造函数进行实例化。
    问题在于System.String A="12";
    这样进行赋值System.String去调用了哪个构造函数
    因为System.String A=new System.String("12");这样是不对的,因为没有相应的构造函数。
    所以这个"12"肯定会作过一些手脚,例如把它先放在char[]中,然后再对System.String进行构造。
    这个=号应该是操作操作符重载的情况吧。这里面还是有点不清楚,所以各位高手指点一下吧。
      

  5.   

    String在c#属于基元类型,在元数据中以文本常量形式建立String。
    String a="a";他并不调用任何构造函数。
    在IL代码中并没有任何newobj(构造对象实例)指令,仅仅是ldstr(加载字符串)而已。
      

  6.   

    shrinerain(圣影雨) ( ) 信誉:100  2005-08-05 08:41:00  得分: 0  
     
     
       String在c#属于基元类型,在元数据中以文本常量形式建立String。
    String a="a";他并不调用任何构造函数。
    在IL代码中并没有任何newobj(构造对象实例)指令,仅仅是ldstr(加载字符串)而已。
      
     
      

  7.   

    String A="12";
    楼主,这条语句没有调用构造函数,只是一个把已有对象的引用转递给变量的一个过程。
      

  8.   

    string a = "12"  ; 这是一个装箱过程(boxing)详细可以看:
    http://www.cndevx.com/Article/ShowArticle.asp?ArticleID=1880如果知道运算符重载,那样理解也可以!
      

  9.   

    明白了一点
    这个System.String类居然没有调用它自己的构造函数,晕了。