4

dart 中是否会有 c# Reflection.Emit 命名空间的等价物?

Reflection.Emit 有许多类用于在运行时构建类型并添加属性,配置它们的 getter 和 setter,以及在运行时构建方法和事件处理程序,这在元编程方面非常强大。

我的想法是在运行时生成我的数据模型并将它们缓存在地图中,这样我就可以在运行时创建实例并在需要时向它们添加新的方法和属性,而不必在生成类后经常使用镜像,这在编写 ORM 和更动态的应用程序时可能非常有用,在这些应用程序中使用一次反射而不是每次需要修改实例时都使用它

我的问题是:

  • 未来版本的 dart 会不会有这样的东西?他们提到了一些关于 aMirror Builder但我不确定是否做同样的事情,有人可以确认这是否是 Mirror Builder 的意思吗?
  • 另一个问题是,如果我能够在服务器上将我的数据类型生成为字符串,有没有办法在将它们发送到客户端之前编译它们并将它们映射到 Map 并使用此 Map 创建实例?
4

1 回答 1

3

我已经看到讨论说这应该在某个时候得到支持,但据我所知,在不久的将来不会开始工作。

类似的要求通常通过转换器在构建时生成代码(Polymer、Angular 等)来解决,转换器分析代码并生成用于反射属性访问或 HTML 中的代码片段的代码。

Smoke是一个旨在简化这一点的软件包。

代码生成的优点是客户端需要下载的代码量要少得多。当您在运行时进行代码生成时,您需要一个编译器,并且需要将大量代码下载到浏览器中。

try.dartlang.org采用了这样的方法。源代码可在此处获取https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/site/try/。它包括 dart2js(基于 JavaScript 构建)并运行将 Dart 代码编译为 JS 的后台隔离。

于 2014-05-20T11:56:23.307 回答