使用ReadOnlyCollection和Getter

时间:2016-03-08 19:07:04

标签: c# deep-copy

昨天我问了一个关于深度克隆列表的问题,我得到了一个很好的答案,你可以阅读here

我遇到的问题是答案使用ImmutableList并且我没有遇到任何问题,只是如果我想使用ReadOnlyCollection和确保我会返回一份副本我的集合,并且不能修改类中的那个。

我只是想知道以下内容是否正确。

    private ReadOnlyCollection<Author> listofAuthors;   
    private List<Author> copyofAuthors;

    public Book(ICollection<Author> authors)
    {

        copyofAuthors = new List<Author>(authors);
        listofAuthors = new ReadOnlyCollection<Author>(new List<Author>(copyofAuthors));

    }

    public ICollection<Author> Authors
    {
        get
        {
            return new ReadOnlyCollection<Author>(new List<Author>(copyofAuthors));
        }
    }

根据MSDN documentation ReadOnlyCollection只是一个基础可变集合的包装器。因此,如果对基础集合进行任何更改,它将反映在ReadOnlyCollection中。上面的代码getter返回一个新的List作为只读集合。

问题1:

鉴于上述代码,调用它的任何其他代码都将获得私有ReadOnly(new List())的副本,对吗?用户所做的任何更改都不会反映在Book类的ReadOnlyCollection中,对吗?

问题2:

我理解ImmutableList更理想,但如果我需要使用ReadOnlyCollection<Authors>,那么我在构造函数/ Getter中所做的是正确的吗?或者它可以用另一种/更好的方式实施吗?

0 个答案:

没有答案