43

Delphi 2010の新しい/改善された RTTI 機能についてはよく耳にしますが、私の無知を認めなければなりません...理解できません。Delphi のすべてのバージョンが RTTI をサポートしていることは知っています...そして、RTTI (Runtime Type Information) を使用すると、アプリケーションの実行中に型情報にアクセスできることも知っています。

しかし、それは正確にはどういう意味ですか? Delphi 2010 の RTTI サポートは、.NETのリフレクションと同じものですか?

RTTI が便利な理由を誰か説明してもらえますか? 私がとんがった髪の上司のふりをして、RTTI がクールな理由を理解するのを手伝ってください。実際のアプリケーションでどのように使用できますか?

4

7 に答える 7

12

ほとんどの人は、おそらく実際のアプリケーションでは使用しません。

それを使用するのはフレームワークビルダーです。DUnitなどのフレームワークは、RTTIを広範囲に使用します。

新しいRTTI機能により、.NETで利用できるものと同様に、より高度なフレームワークとツールが表示されるようになると期待できます。これらのフレームワークは、RTTI自体よりも開発に革命をもたらします。

于 2010-02-07T19:31:23.617 に答える
2

DelphiのRTTIは、バージョン1.0以降常に重要です。従来のRTTI機能には、クラスの「公開された」プロパティセクションが含まれ、オブジェクトインスペクターとコンポーネントの設計時機能が機能するようになりました。私の目的では、公開クラスのプロパティを使用して、実行時にこれらのプロパティを列挙できるようにすることがよくあります。永続化のために、オブジェクトからディスクに物を保存するため。

Delphi 2010 RTTIは、この古典的なRTTIを大幅に拡張しているため、Delphiがデルフィ2010までRTTIを持っていなかったと考えることは許されます。

「TheNewRTTI」の最も有用なアプリケーションは、(他のいくつかの回答がすでに述べているように)教祖によって書かれたフレームワークに含まれることになると思います。

  1. ファイルまたはデータベースへの永続性を処理します。データベースと構成、またはドキュメントの保存/読み込みのフレームワークとコンポーネントは、内部でこれを使用します。

  2. JSON、XML、EDIなどのさまざまな有線形式との間のピクルス/マーシャリング/エンコード/デコードを処理します。

  3. ユニットテストは他の誰か(JUnit)によって言及されましたが、おそらく同じフレームワークがデバッグおよびエラー報告ツールに本当に役立つと思います。パラメータとして渡されたオブジェクトがスタック上にある場合、関数のリストだけでなく、失敗した関数に渡されたすべてのデータをダンプできるバグレポートを作成してみませんか?

ご覧のとおり、一部のクリエイティブな人々は、これのさらに多くの用途を考えている可能性があります。.NETリフレクション(別の回答で詳しく説明されています)に同等性はありませんが、多くの「動的言語」機能(Perl、Python、JavaScriptを考えてください)を他の方法で強く型付けされた静的にもたらすと言えます。 Delphiの型システムの世界。

于 2010-02-08T18:22:12.327 に答える
0

個人的には、拡張 RTTI により、メソッド ポインターから呼び出し規約を取得できるようになりました。ただし、現在、そのコードは条件付きのディレクティブの下にあり、満足していないためです。

(基本的な RTTI の回避策に関する批評家や提案は大歓迎です)

于 2010-11-14T19:42:17.547 に答える
0

を探してみると、RTTI 属性がデータベース フレームワークの作成と純粋なオブジェクトへのシリアル化、およびその逆のTMS Aurelius点で非常に便利であることがわかります。ORMXML

于 2013-07-27T13:05:48.270 に答える
-5

彼らはそれを箱に置いたので、あなたは気にするはずです. 明らかに彼らは、何人かの人々が気にするだろうと考えています.

実際に使用できるかどうかは、プロジェクトの性質に完全に依存します。以前はそれを持っていなかったし、今持っていることがなぜ利点なのか理解していないので、これはあなたがそれを使用していないことを示唆しています. その場合、その主題の用途を見つけることができるかどうかを発見するために、主題をさらに調査することに時間を費やすかどうかはあなた次第です.

それがプロジェクトに関して最も生産的な時間の使い方であるかどうかは、やはりあなただけが知ることができます。

于 2010-02-07T20:02:18.750 に答える