19

Delphiの新しいRTTIについてのすばらしい説明を見つけましたが、読んだすべてのことについて1つの重要なことを理解していません-どこでそれを使用できますか?

何を置き換えることになっていますか?

4

2 に答える 2

20

拡張RTTIは、.NETのReflectionのように機能します。これにより、内部アプリケーション構造情報にアクセスできます。以前はアクセスできなかった範囲で、実行時にクラスのプロパティやメソッドなどにアクセスできます。

それを使用するいくつかの方法:

  1. XMLまたは他のメディアへのクラスのシリアル化/逆シリアル化
  2. オブジェクトのデータベースへのマッピング。ORM。
  3. オブジェクトのクローン作成
  4. メソッドの動的呼び出し
  5. 実行時にオブジェクトを「スキャン」し、それに応じて動作します。
  6. 「プラグイン」型システムの開発が容易

それを使用することが有益であるシナリオはおそらくたくさんあります。つまり、アプリケーションに動的な側面を追加します。あなたの製品は、設計時にすべてを設計するよりも、実行時に、そしてより効率的にいくつかのことを行うことができます。それは特効薬ではなく、多くの人が決してそれを使用しないかもしれません。しかし、いくつかのデザインパターンやいくつかの問題は、新しいRTTIを使用しないと(少なくとも効率的な方法では)解決できません。

于 2010-04-17T07:13:36.207 に答える
5

拡張RTTIが役立つ可能性がある1つの例:

今日まで、フォームのプロパティは公開する必要がありました。これは、Delphiフォームファイル(dfm)をシリアル化/逆シリアル化するためにこの可視性が必要だったためです。

拡張RTTIを使用すると、Delphiは、この高レベルの可視性を必要としない新しいストリーミングレイヤーを使用できます。もちろん、これは単なるアイデアですが、実際には、フォーム上のすべてのコンポーネントをプライベートまたは保護できるという利点があります。これはより多くのOOP(カプセル化)であり、外部から見えるフォームフィールド/プロパティのリスト内の無関係なエントリの数十によって引き起こされる「ノイズ」を排除します。


拡張RTTIのもう1つの典型的な使用例は、制御の反転依存性注入フレームワークです。

たとえば、Delphi Spring Framework Delphiは、コンストラクタインジェクションに使用できるRTTIを多用するため、Delphi 2010(またはそれ以降)を必要とします。

于 2010-04-17T08:09:34.023 に答える