C# 在属性对象内更改(嵌套)属性时调用属性设置器
疯狂的头衔。我知道。但是请容忍我 考虑以下情况:C# 在属性对象内更改(嵌套)属性时调用属性设置器,c#,.net,properties,C#,.net,Properties,疯狂的头衔。我知道。但是请容忍我 考虑以下情况: a.ClassProperty.ValueProperty = 4; 其中: class A { [...] public PropertyClass ClassProperty { get { return new PropertyClass(m_someInformation); } set { ComplexMultistepSetInformation(m_someInformat
a.ClassProperty.ValueProperty = 4;
其中:
class A
{
[...]
public PropertyClass ClassProperty
{
get { return new PropertyClass(m_someInformation); }
set { ComplexMultistepSetInformation(m_someInformation); }
}
[...]
}
以及:
我的问题:当执行第一个给定语句时,代码将返回PropertyClass对象并更改其中的“ValueProperty”,但“a”的信息本身将保持不变。我想要的是,在更改通过“ClassProperty”getter检索的PropertyClass对象的信息之后,调用“ClassProperty”的setter。意思是,使第一行完成以下任务的方法:
PropertyClass tmp = a.ClassProperty;
tmp.ValueProperty = 4;
a.ClassProperty = tmp;
是否有任何方法可以改变周围的getter和setter来完成它
(附加信息:在类a中拥有PropertyClass对象不会有帮助。在实际用例中,PropertyClass是本机代码的包装器,简化了对变量的访问并提供了几个扩展方法,而本机对象的信息由属性“ClassProperty”的设置器“写入”)
是否有任何方法可以改变周围的getter和setter来完成它
不,不是真的。守则:
a.ClassProperty.ValueProperty = 4;
简单地说就是:
var tmp = a.ClassProperty;
tmp.ValueProperty = 4;
它永远不会尝试调用a.ClassProperty
setter
您可能希望更改为以下内容:
a.ModifyClassProperty(x => x.ValueProperty = 4);
其中,ModifyClassProperty
将有效地执行以下操作:
- 获取信息
- 已向其应用用户提供的委托
- 执行任何步骤以将更改应用于基础数据
void ModifyClassProperty(Action<PropertyClass> action)
{
var tmp = ClassProperty;
action(tmp);
ClassProperty = tmp;
}
void ModifyClassProperty(操作)
{
var tmp=类别属性;
行动(tmp);
ClassProperty=tmp;
}
void ModifyClassProperty(Action<PropertyClass> action)
{
var tmp = ClassProperty;
action(tmp);
ClassProperty = tmp;
}