none
MVP专家讲坛-string大家谈 RRS feed

  • 常规讨论

  • string这个类型在C#中是一个异类的类型,是引用,但使用起来却像值类型,在这里,大家可以聊聊大家对string类的理解和看法。

    山西.net俱乐部
    2010年4月13日 16:03
    版主

全部回复

  • 对,我也在疑惑。怎么是引用类型,使用起来又是值类型一样呢?希望有人能够给下解释。
    2010年4月14日 7:46
  • 这个与String 类型的存储方式有关系。

    2010年4月15日 9:06
  • String这个类的确比较特殊!

    首先,String类的确是引用类型的。

    其次,微软用了特殊的方法让他使用起来更像一个值类型,因为字符串通常来说,作为值类型更合理!

    String的特殊支持是内置在CLR中的,比如修改一个String实例会在托管堆中生成一个新的实例这个特性!

    过去也有同行问过,我们自己怎么实现一个String这样的类,实际上就像我上面说的,他的很多行为是CLR本身提供的,并不是在类定义中实现的,所以我们要实现这样的类比较困难!


    周雪峰
    2010年4月23日 7:01
    版主
  • 我觉得STRING的功能还是很强大的,按道理讲,在C#中,所有的数据类型都是类,但是sting是很特别的一种表现。

    但是大部分的字符串操作都会生成一个新的实例,但旧的实例去哪儿了。对它们所占用的内存是如何释放的呢?

    在对频繁操作的同一字符串操作中,我觉得StringBuilder更好用一些。

    另外,string.format 的功能实在是太好了。感谢它的发明者!

     

     

    2010年4月24日 9:03
  • 我觉得STRING的功能还是很强大的,按道理讲,在C#中,所有的数据类型都是类,但是sting是很特别的一种表现。

    但是大部分的字符串操作都会生成一个新的实例,但旧的实例去哪儿了。对它们所占用的内存是如何释放的呢?

    在对频繁操作的同一字符串操作中,我觉得StringBuilder更好用一些。

    另外,string.format 的功能实在是太好了。感谢它的发明者!

     

     


    旧的实例变成不可达的对象,垃圾回收机制会在合适的时候释放他的内存!
    周雪峰
    2010年4月25日 2:56
    版主