我知道C#里面的类是引用类型,也就是保存的是地址而不是实际的值,需要new进行实例化,如同C++里的指针。C#:
string str = "OK";
C++:
string *ptr = "OK";那么上面的C#的定义是不是像C++那样,"OK"被当作常量,str只是指向它而已呢?那样后面修改str的值肯定出错啊
如果不是,那么又是用什么实现的呢?

解决方案 »

  1.   

    string 是特殊的引用类型
    在C#里面,修改string的值等于是新建一个string变量(内存空间)将原string删除,所以效率比stringBuider要差很多。一般小量字符串处理都用string ,而牵涉到大量的字符串的修改或连接需要用stringBuider
      

  2.   

    string 是特殊的引用类型 
    在C#里面,修改string的值等于是新建一个string变量(内存空间)将原string删除,所以效率比stringBuider要差很多。一般小量字符串处理都用string ,而牵涉到大量的字符串的修改或连接需要用stringBuider
    ================================同意!
      这个是字符串和其他引用类型不同的地方
      

  3.   

    C++: 
    string *ptr = "OK"; 
    ptr = "NO";
    这难道会出错啊?
      

  4.   

    C# str 只是初始化,再赋值也不会出错的。
      

  5.   

    string 是特殊的引用类型 
    在C#里面,修改string的值等于是新建一个string变量(内存空间)将原string删除,所以效率比stringBuider要差很多。一般小量字符串处理都用string ,而牵涉到大量的字符串的修改或连接需要用stringBuider正解
      

  6.   


    //str是一个引用,相当于一个指针,那么下面这个语句就是str只是指向"OK"这个常量,而并没要将str实例化(实例化了么?)
    public string str = "OK"; //可是下面这两个语句又是完全正确的,
    str += "Hi";
    Console.WriteLine(str);
    [/code]
    //在C++里面的表述:
    string *ptr = reinterpret_cast<string*>("OK");
    *ptr += "Hi";
    cout << *ptr << endl; ptr只是指向常量"OK"的指针,不能改变"OK"的值,所以后面的语句在运行的时候会报错。
    我疑问的地方就是这点,在C#里是通过什么机制来让str这个引用类型可以未实例化就可以使用的呢?在初始化的时候: public string str = "OK" 的时候,会不会像C++那样调用string的赋值操作符将"OK"的值赋给一个隐式对象,再用str作为此对象的引用???期待高手的解答!
    谢过!!
    另外,小弟稍过得去的是C++,准备潜心研究的是Java, 所以并不擅长C#,也的确没看太多书,有太菜的地方请多谅解。