我有一个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来设置只读字段...
还有其他更优雅的方式来做到这一点吗? 谢谢!