0

これはばかげた質問かもしれません。申し訳ありませんが、この種のことは初めてです。

ミラーに関するドキュメントを読んだ後、ミラー API はインスタンスをコピーするだけでなく、いつ/なぜ使用するかわからないメソッドにアクセスするようなものであることがわかります。

誰かが私にいくつかの指針を教えてくれます。いくつかの例がいいでしょう。

4

1 に答える 1

4

ミラー API を使用すると、オブジェクトと型に関するメタデータをプログラムで (実行中に) 取得し、オブジェクトでメソッドを実行できます。これは、.NET または Java のリフレクションに似ています。

典型的な例は、プラグイン サポートの実装です。

インターフェイスを定義し、それを実装する各型のインスタンスIPluginを自動的に登録したいとしますPluginManager。新しい実装ごとに明示的に登録する必要はありません。ユーザーが独自のプラグインを展開できるかどうかなど、事前にすべてのプラグインを把握していない場合もあります。

次のようにすることもできます (警告: Mirror API を使用したことがないため、これは API ドキュメントに基づく高レベルの説明であり、適切な実装ではありません):

  • 最初に、その中の各ライブラリのインスタンスMirrorSystem.librariesを取得するために使用しますLibraryMirrorMirrorSystem
  • 次に、プロパティをLibraryMirror使用してライブラリ内の各クラスを取得しますclassesClassMirror
  • ClassMirror使用するたびsuperinterfacesに、実装されたすべてのインターフェースを取得する
  • 実装されているインターフェースのいずれかが でIPluginある場合、そのクラス ( ) のインスタンスを作成し、ClassMirror.newInstanceそれをプラグイン マネージャーに登録できます。

ミラー API がなければ、すべての型を列挙したり、それらが実装するインターフェイスを見つけたり (オブジェクトを作成せずに)、事前にわからない型のインスタンスを作成したりすることはできません。

正直に言うと、Dart のミラー API の現在の状態がどのようなものかはわかりません。まだ完成していないと思いますが、間違っている可能性があります。

于 2013-05-17T08:06:52.323 に答える