这可能是一个愚蠢的问题,很抱歉这个问题,而且我不熟悉这种东西。
在阅读有关镜像的文档之后,我只能理解镜像API就像复制某些实例一样,并且访问某些我不知道何时/为何使用的方法。
任何人都想给我一些指示,一些例子会很好。
答案 0 :(得分:4)
Mirror API允许您以编程方式(在执行期间)检索有关对象和类型的元数据,并在对象上执行方法。它类似于.NET或Java中的reflection。
一个典型的例子是实现插件支持:
假设您定义了一个IPlugin
接口,并希望自动向您的PluginManager
注册实现它的每种类型的实例,而无需显式注册每个新实现。有时你甚至不提前知道所有的插件,例如如果用户可以部署自己的插件。
你可以这样做(警告:我从未使用过Mirror API,所以这是基于API文档的高级描述,而不是正确的实现):
MirrorSystem.libraries
获取LibraryMirror
MirrorSystem
个实例
LibraryMirror
,您使用classes
属性为库中的每个类获取ClassMirror
ClassMirror
使用superinterfaces
获取所有已实现的接口IPlugin
,您可以创建该类的实例(ClassMirror.newInstance
)并将其注册到插件管理器。如果没有镜像API,您将无法枚举所有类型,找到它们实现的接口(不创建对象)或创建一个您事先不知道的类型的实例。
老实说我不确定Dart中镜像API的当前状态是什么,我相信它还没有完成,但我可能错了。