【发布时间】:2011-08-23 21:34:41
【问题描述】:
这是我在Effective C# 书中看到的一个例子:
private BindingList<PayrollData> data;
public IBindingList MyCollection
{
get { return data; }
}
public void UpdateData()
{
// Unreliable operation might fail:
var temp = UnreliableOperation();
// This operation will only happen if
// UnreliableOperation does not throw an
// exception.
data = temp;
}
作者说这适用于值类型而不是引用类型。 我不明白他的意思。
我想我现在明白了:集合是 ref 类型。 “数据字段”的消费者不会记得他们持有堆上旧存储的副本。 如果“数据”是值类型 - 消费者(使用数据的其他代码)会记得他们持有数据的深层副本,并会在需要更新时再次请求它。
对吗?
【问题讨论】:
-
这里很难跟上您的思路。请详细说明。
标签: c# reference defensive-copy