【发布时间】:2013-03-02 07:09:52
【问题描述】:
我在一个选项对话框中有一个“恢复默认值”按钮,我想恢复仅在此表单中受影响的值,而不是整个 Properties.Settings.Default
所以我尝试了:
var backup = Properties.Settings.Default;
Properties.Settings.Default.Reload();
overwriteControls();
Properties.Settings.Default = backup;
但不幸的是,这不起作用,因为备份似乎在Reload() 也发生了变化?为什么以及如何正确执行此操作?
【问题讨论】:
-
您只是保存对设置对象的引用,而不是它的副本。因此,Reload 将更新唯一可用的对象,您可以通过这两个变量看到。
-
所以这是一个指向 Properties.Settings.Default 的指针还是什么?实际上我没有使用合成器作为指针......这真的让我感到困惑......我将如何保存它的副本?
-
.NET 使用“引用类型”和“值类型”的概念。类实例是“引用类型”,变量指向它们。它是一个指针,但由运行时管理。为了复制一个对象,它必须支持某种形式的“克隆”——msdn.microsoft.com/en-us/library/system.icloneable.aspx IClonable 接口用于此目的。但是,设置对象没有实现它,我不知道如何在没有进一步研究的情况下解决这个问题,这就是为什么我没有提出这个作为答案,只是指出你的代码在哪里以及为什么失败。