我知道可变结构体是有害的。但请考虑以下struct
:
public struct Foo
{
private readonly StringBuilder _sb;
public Foo(StringBuilder sb)
{
_sb = sb;
}
public StringBuilder Sb
{
get { return _sb; }
}
}
在我看来,Foo
看起来是不可变的,因为当你运行 var foo = new Foo(new StringBuilder())
时,你无法重新分配 Sb
属性,因为它是只读的。
然而,你可以执行以下操作:
var foo = new Foo(new StringBuilder());
foo.Sb.Append("abc"); // _sb is also modified
这会影响foo
的内部状态。
问题: 这是否被认为是良好的struct
设计,或者我应该避免在值类型中具有可变引用类型成员?