在没有构造函数的情况下初始化许多只读字段

时间:2019-01-24 00:46:08

标签: c# serialization syntax access-modifiers

我有一个Serializable类,其中包含存储在字段中的数据。 该类被实例化,序列化并发送到客户端程序。

重要提示:该类与其他Serializables一起在第3个程序集中。

示例类(第三个程序集):

[Serializable]
public sealed class Settings
{
    public int A;
    public bool B;
    …
    public object N;
}

示例对象初始化程序(服务器):

var s = new Settings
{
    A = 0;
    B = true;
    …
    N = new Object();
};

客户端程序反序列化并使用对象。

一个问题是我不想让客户端程序更改字段的值。 这不是出于安全原因(他们甚至可以使用Reflection ...),而是为了减少失败的机会。

但是真正的问题是,有太多字段,我不想创建30个以上的参数构造函数,因此可以使用只读字段。另外,对象初始化器将不起作用。

首先想到的是将公共属性与受限制的设置器一起使用,因此我仍然可以(也许)使用对象初始化器。 但是,由于该类在第三个程序集上,因此我无法使用内部设置器。 为此,保护是没有用的,因为我必须基本上重写基类(甚至现在将其密封)。

现在,我正在考虑使用一个IDictionary<string, dynamic>IDictionary<string, object>并初始化只读字段的构造函数,但是如果要在其中添加或删除任何字段,这很容易出错。未来。

我没有想法了,在我看来,我将不得不做些丑陋的事情:

public Settings
(
    int a,
    bool b,
    …,
    object n
)
{
    A = a;
    B = b;
    …
    N = n;
}

我想我可以使用Reflection来设置只读字段...

还有其他更优雅的方式来做到这一点吗? 谢谢!

0 个答案:

没有答案