【发布时间】:2017-08-18 11:38:17
【问题描述】:
我正在为一个要求所有代码都在一个类(或嵌套类)中的软件编写插件...
我想要做的是创建一个方法,该方法可以处理对我的_data 对象的嵌套属性的更改,并为我提供一个中心位置来执行诸如设置脏标志之类的事情,以便我知道以后保存它。
下面是一些说明我的文件结构的代码,底部是两个伪方法,希望可以让您了解我要完成的工作。
public class SomePlugin
{
private DataObject _data;
private bool _dataIsDirty = false;
private class DataObject
{
public GeneralSettings Settings { get; set; }
}
private class GeneralSettings
{
public string SettingOne { get; set; }
public string SettingTwo { get; set; }
}
protected override void Init()
{
_data = new DataObject
{
Settings = new GeneralSettings
{
SettingOne = "Example value one.",
SettingTwo = "Example value two."
}
}
}
// These are pseudo-methods illustrating what I'm trying to do.
private void SetData<t>(T ref instanceProperty, T newValue)
{
if (newValue == null) throw new ArgumentNullException("newValue");
if (instanceProperty == newValue) return;
instanceProperty = newValue;
_dataIsDirty = true;
}
private void SomeOtherMethod()
{
SetData(_data.Settings.SettingOne, "Updated value one.");
}
}
【问题讨论】:
-
对不起,我应该提到除了已经提供的之外,我无法安装或使用任何第三方库或包。这是一个在 Unity 上运行的游戏的插件。
-
看起来很有趣,但我不知道它是否可行,也不知道如何尝试在我的结构中实现它。您一直在建议这些基于事件的解决方案...这是因为无法进行类似于我编写的伪方法的实现吗?
-
您可以将
[JsonIgnore]放在IsDirty上,这样它就不会“污染”JSON。
标签: c# mono nested-properties