更改属性对象内的(嵌套)属性时调用属性设置器

时间:2014-05-12 09:14:29

标签: c# .net properties

疯狂的头衔。 。我知道 。 。但请忍受我。 。

考虑以下情况:

a.ClassProperty.ValueProperty = 4;

其中:

class A
{
    [...]
    public PropertyClass ClassProperty
    {
        get { return new PropertyClass(m_someInformation); }
        set { ComplexMultistepSetInformation(m_someInformation); }
    }
    [...]
}

class PropertyClass
{
    [...]
    public int ValueProperty { get; set; }
    [...]
}

我的问题:当执行第一个给定语句时,代码将返回一个PropertyClass对象并更改' ValueProperty'在其中,但信息本身为' a'将保持不变。
我想拥有的是ClassProperty'在更改通过' ClassProperty'检索的PropertyClass对象的信息之后被调用。吸气。意思是,让第一行完成以下任务的方法:

PropertyClass tmp = a.ClassProperty;
tmp.ValueProperty = 4;
a.ClassProperty = tmp;

有没有办法改变吸气剂和固定器来完成它。

(附加信息:在A类中使用PropertyClass对象无济于事。在实际用例中,PropertyClass是本机代码的包装,简化了对变量的访问并提供了几种扩展方法,而本机对象的信息得到了&# 39;由财产制定者编写' ClassProperty')

1 个答案:

答案 0 :(得分:1)

  

有没有办法改变吸气剂和固定器来完成它。

不,不是真的。代码:

a.ClassProperty.ValueProperty = 4;

简单地翻译成:

var tmp = a.ClassProperty;
tmp.ValueProperty = 4;

永远不会尝试拨打a.ClassProperty二传手。

您可能希望更改为:

a.ModifyClassProperty(x => x.ValueProperty = 4);

ModifyClassProperty有效的地方:

  • 获取信息
  • 应用用户提供的代理
  • 执行将更改应用于基础数据的任何步骤

例如,您可以使用当前代码实现它:

void ModifyClassProperty(Action<PropertyClass> action)
{
    var tmp = ClassProperty;
    action(tmp);
    ClassProperty = tmp;
}