毫无疑问:String是引用类型。另一方面,String和int (Int32), Single (float)一样都是.NET的Primitive类型,CLR完全了解String对象的内部构造,并且有内建的用于String操作的指令(ldstr)。String的源代码不是用.NET语言/C#实现的,而是在CLR代码当中。在SSCLI的代码中Object.H里面可以找到下面的结构:
class StringObject : public Object
{
private:
DWORD m_ArrayLength;
DWORD m_StringLength;
WCHAR m_Characters[0];
...
};
另外,.NET程序仍然有办法打破String的Immutable——当然通常不建议这样做:
- unsafe code: C#可以使用unsafe代码直接编辑一个String的字符序列:
fixed (char* p = str) {
p[2] = 'X';
} - P/Invoke: 传递String作为变量给Native函数的时候,Native函数可以改变String的值。
打印 | 张贴于 2004-08-21 05:24:00 | Tag:.NET
留言反馈
2. String传值还是传引用
3. string和String有什么区别?
4. String为什么是Immutable,怎么实现的?
如果改用char[]应该可以实现更改
对于定义如 public void xx(string yy);的函数,传进去的yy的值是改不了的.
一般,如果P/Invoke的时候想要修改传进去的string的值,推荐使用StringBuilder.