请问一个关于stringbuilder的有关问题
请教一个关于stringbuilder的问题
今天在随手写Demo的时候发现的,以下是部分代码
在代码中使用了两个readonly变量,一个是string,一个是StringBuilder
在编译时,最后一句会报错,readonly的变量只能在构造函数和初始化时赋值,这个是意料之中的。
我的问题是为什么readonly的StringBuilder 却可以被Append?
在Main中调用多次都很正常,最后 tostring()也能生成字符串,这是为什么呢?这里的readonly还有什么意义呢?
谢谢!
------解决方案--------------------
因为readonly的是引用,而不是引用的对象。
如果你在Main这么写,是报错的:
outPutMessage = new StringBuilder();
------解决方案--------------------
今天在随手写Demo的时候发现的,以下是部分代码
- C# code
class Program { private static readonly StringBuilder outPutMessage = new StringBuilder(); private static readonly string outPutString = string.Empty; static void Main() { //不关心的内容 } private static void AppendtoMessage(string message) { outPutMessage.Append("\n" + message); outPutString = outPutString + "\n" + message; } }
在代码中使用了两个readonly变量,一个是string,一个是StringBuilder
在编译时,最后一句会报错,readonly的变量只能在构造函数和初始化时赋值,这个是意料之中的。
我的问题是为什么readonly的StringBuilder 却可以被Append?
在Main中调用多次都很正常,最后 tostring()也能生成字符串,这是为什么呢?这里的readonly还有什么意义呢?
谢谢!
------解决方案--------------------
因为readonly的是引用,而不是引用的对象。
如果你在Main这么写,是报错的:
outPutMessage = new StringBuilder();
------解决方案--------------------
- C# code
using System; namespace Test { class Program { private readonly static MyString _MyString = new MyString(); static void Main() { // 下面这行是错误的 // _MyString = new MyString(); _MyString.Append("1"); _MyString.Append("2"); _MyString.Append("3"); Console.WriteLine(_MyString.Value); Console.ReadKey(); } } class MyString { private String _value; public String Value { get { return _value; } } public MyString() { _value = String.Empty; } public void Append(String s) { _value = String.Format("{0}{1}", _value, s); } } }