在创建映射时,我正在读取您的集合属性应如下所示:
public virtual ReadOnlyCollection<Product> Products
{
get { return new ReadOnlyCollection<Product>(new List<Product>(_products).AsReadOnly()); }
}
Run Code Online (Sandbox Code Playgroud)
为什么它必须是这样的?它似乎每次被引用时返回一个新的集合?
它返回一个包装类实例,阻止调用者能够直接修改您要返回的集合.
如果您只是简单地返回基础列表,则任何调用者都可以以可能破坏实际拥有该列表的类的方式更改它.
即使您将列表作为只读接口(例如IEnumerable或ICollection)返回,也不会阻止调用者执行运行时转换并进入列表.
通过返回的包装对象,可以防止来电永远能够改变列表.包装器不公开任何允许更改基础列表的方法,并且尝试转换包装器对象将失败.包装器不会复制数据 - 它只是保留对列表的引用,并阻止写入操作.
在ORM映射的情况下,这允许对象模型控制在哪个访问点可以改变对象之间的关系.
归档时间: |
|
查看次数: |
177 次 |
最近记录: |