我计划基于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方法公开。 但是,为了启用集合初始化程序,它看起来需要公开
提前致谢!
答案 0 :(得分:1)
不,没有办法将Add
方法的使用限制在集合初始值设定项中。集合初始值设定项会生成构造对象的代码,然后对其进行变更,因此按照定义类型不能支持集合初始值设定项(实际上能够初始化它,即集合初始化程序不在哪里&#39) ; t只是抛出异常)并且是不可变的。