0

我打算创建一个基于 JObject 的不可变类。

要求之一是将对象直接反序列化到我的新自定义类上,就像我们对 JObject 所做的那样。

我已经实现了 GetEnumerator 和 Add 方法来启用集合初始化程序。

代码如下所示

public sealed class ImmutableJObject : IEnumerable
{
    readonly jObject jObeject;

    public ImmutableJObject(params object[] content)
    {
        this.jObject = new jObject(content);
    }

    public IEnumerator GetEnumerator()
    {
        return ((IEnumerable)jObject).GetEnumerator();
    }

    public void Add(string propertyName, JToken value)
    {
        this.jObject.Add(propertyName, value);
    }
}

只有在使用集合初始化程序时才能使 Add 方法可访问?

由于本质上是不可变的,我不希望 Add 方法公开。但是,它看起来需要公开才能启用集合初始化程序

提前谢谢!

4

1 回答 1

1

不,没有办法将该Add方法的使用限制为集合初始化程序。集合初始化器会生成构造对象的代码,然后对其进行变异,因此根据定义,类型不能支持集合初始化器(实际上能够初始化它,即集合初始化器不只是抛出异常)并且是不可变的。

于 2017-11-15T22:16:59.740 回答