我可以在属性本身中定义setter和getter,而不是包含类吗?

时间:2014-01-30 18:26:27

标签: dart descriptor

假设我希望我的班级在属性访问上做一些事情。我当然可以在制定者和吸气者中做到这一点:

class Foo {
    set bar (v) {
        // do stuff
    }
}

但是,如果我想将相同的行为附加到多个属性,我必须为每个属性明确定义相同的setter和getter。 (我想到的用例是一个可观察的,即一个知道其属性何时被更改的类。)

我想做的是:

class Foo {
    var bar = new AttributeWithAccessBehavior();
}

Python用描述符做到这一点 - Dart中最接近的是什么?

1 个答案:

答案 0 :(得分:1)

AFAIK没有任何可以重用的getter / setter语法。

您可以为字段分配一个函数,您可以使用调用符号()进行访问,但是您必须小心调用函数而不是覆盖字段赋值。

类似但功能更强大的替代方法是可以模拟函数的类(请参阅https://www.dartlang.org/articles/emulating-functions/

具有call方法的类可以像方法一样使用。 这与上面提到的赋值函数类似,但另外您可以存储状态信息。

如果你实现了实际的getter / setter,你当然可以委托你想要的任何东西,但这显然不是你想要的。

对于您提到的用例,有observe个包。 我不知道它究竟是如何解决这个问题的,但是效果很好。