假设我希望我的班级在属性访问上做一些事情。我当然可以在制定者和吸气者中做到这一点:
class Foo {
set bar (v) {
// do stuff
}
}
但是,如果我想将相同的行为附加到多个属性,我必须为每个属性明确定义相同的setter和getter。 (我想到的用例是一个可观察的,即一个知道其属性何时被更改的类。)
我想做的是:
class Foo {
var bar = new AttributeWithAccessBehavior();
}
Python用描述符做到这一点 - Dart中最接近的是什么?
答案 0 :(得分:1)
AFAIK没有任何可以重用的getter / setter语法。
您可以为字段分配一个函数,您可以使用调用符号()
进行访问,但是您必须小心调用函数而不是覆盖字段赋值。
类似但功能更强大的替代方法是可以模拟函数的类(请参阅https://www.dartlang.org/articles/emulating-functions/)
具有call
方法的类可以像方法一样使用。
这与上面提到的赋值函数类似,但另外您可以存储状态信息。
如果你实现了实际的getter / setter,你当然可以委托你想要的任何东西,但这显然不是你想要的。
对于您提到的用例,有observe
个包。
我不知道它究竟是如何解决这个问题的,但是效果很好。