加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 初始化对象中的集合?

发布时间:2020-12-15 17:39:03 所属栏目:百科 来源:网络整理
导读:如果一个对象具有一个集合的属性,对象是创建集合对象还是使消费者检查为null?我知道消费者不应该假设,只是想知道如果大多数人创建收藏对象,如果它永远不会被添加到. 解决方法 您还可以使用“Lazy initailizer”模式,其中集合未初始化,直到(并且除非)有人访
如果一个对象具有一个集合的属性,对象是创建集合对象还是使消费者检查为null?我知道消费者不应该假设,只是想知道如果大多数人创建收藏对象,如果它永远不会被添加到.

解决方法

您还可以使用“Lazy initailizer”模式,其中集合未初始化,直到(并且除非)有人访问属性getter …这避免了在父对象被实例化为其他某些情况下创建它的开销目的不需要收集…
public class Division
    {
        private int divId;
        public int DivisionId { get; set; }

        private Collection<Employee> emps;
        public Collection<Employee> Employees
        { get {return emps?? (emps = new Collection<Employee>(DivisionId));}} 
    }

编辑:这种实现模式通常不是线程安全的…在第一个线程完成修改之前,emps可以被两个不同的线程读取为空.在这种情况下,可能没有关系,因为DivisionId是不可变的,虽然两个线程都会获得不同的集合,但它们都是有效的.因此,第二个线索将会是一个有效的收集. “可能”是因为第一个线程可能在第二个线程重置它之前开始使用emps.这不是线程安全的. Jon SKeet的另一个稍微更复杂的一个实现是线程安全的(参见This article on SIngletons他的例子/讨论如何解决这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读