如何在Dart中的类中动态创建方法或setter?

时间:2013-11-27 08:19:32

标签: dart

是否可以从此类中或从其外部动态地将实例方法或setter添加到现有类中?

1 个答案:

答案 0 :(得分:5)

不,您无法将真实会员添加到班级。

我说真实会员因为您可以使用noSuchMethod()模拟此类功能。这是一个例子:

@proxy
class A {
  final dynamicMethods = <Symbol, Function>{};

  noSuchMethod(Invocation i) {
    if (i.isMethod && dynamicMethods.containsKey(i.memberName)) {
      return Function.apply(dynamicMethods[i.memberName],
          i.positionalArguments, i.namedArguments);
    }
    return super.noSuchMethod(i);
  }
}

main() {
  final a = new A();
  a.dynamicMethods[#sayHello] = () => print('hello');
  a.sayHello();
}

将来这也许是可能的。请参阅the article on Mirrors的摘录:

  

我们希望将来支持更强大的反光功能。这些将包括镜像构建器,旨在允许程序自己扩展和修改,以及基于镜像的调试API。