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

sni*_*tko 3 dart

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

Ale*_*uin 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();
}
Run Code Online (Sandbox Code Playgroud)

在未来,这可能是可能的.请参阅有关镜子的文章的摘录:

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