在运行时使对象不可变[C#]

时间:2009-07-13 17:45:29

标签: c# .net reflection immutability setter

有没有办法(利用我希望的反思)我可以使实例化对象不可变及其所有公共属性?我有一个来自别人的代码库(没有可用的源代码)的类,我需要利用它,如果任何代码片段在实例化之后尝试调用此类中的公共setter,我基本上都希望抛出异常。

注意:我不想在类周围创建一个包装器对象来实现它。我很懒。

2 个答案:

答案 0 :(得分:11)

我发现很难相信你愿意引入反射代码来做一些可以用包装类简单解决的东西。

现在您花费很少的时间投入,可以在您的反射代码中断或需要修改时为您节省大量的痛苦时间。包装器类很简单,易于实现,类型安全,并且对于其他开发人员来说也很有意义。不要让懒惰决定你的建筑选择。

答案 1 :(得分:6)

没有没有经过反思。类型定义不能在运行时通过反射进行更改,因此它不能用作使类型不可变的设备。

但反射可以用来违反一种类型的不变性。例如,可以在构造函数运行后很长时间通过反射设置标记为readonly的属性。