【问题标题】:Can I define setter and getter in the attribute itself, rather than the containing class?我可以在属性本身而不是包含类中定义 setter 和 getter 吗?
【发布时间】:2014-01-30 18:26:26
【问题描述】:

假设我想让我的班级做一些关于属性访问的事情。我当然可以在 setter 和 getter 中做到这一点:

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

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

我想做的是这样的:

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

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

【问题讨论】:

    标签: dart descriptor


    【解决方案1】:

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

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

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

    具有call 方法的类可以像方法一样使用。 这类似于上面提到的分配功能,但您还可以存储状态信息。

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

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

    【讨论】:

    • observe 并没有真正解决问题 - 它需要您轮询对象以进行更改,或者为您的属性定义设置器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2014-05-09
    • 1970-01-01
    • 2012-09-09
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多