1

Rtti を使用して、 aが、またはTRttiMethodとしてマークされているかどうかを判断することは可能ですか?overloadoverrideabstract

前もって感謝します。

4

2 に答える 2

2

過負荷:これにはRTTIフラグはないと思いますが、同じ名前のメソッドが複数あるかどうかを確認できます。それは完璧ではありませんが、おそらくあなたが得ようとしているのと同じくらい近いでしょう。

オーバーライド:まず、メソッドが仮想であることを確認します。(または動的またはメッセージディスパッチ。)次に、クラスの祖先をチェックして、同じ名前とVirtualIndexプロパティを持つ他のメソッドを探します。

要約:rtti.pasの実装mfAbstractセクションの奥深くに、一連のメソッドデータフラグがあり、と呼ばれるものがあり、として定義されてい1 shl 7;ます。これを参照するコードはありませんが、コンパイラによって生成されたRTTIに実装されています。メソッドのTRttiMethodリファレンスがある場合は、次のようにテストできます。

IsVirtual := PVmtMethodExEntry(method.Handle).Flags and (1 shl 7) <> 0;

PVmtMethodExEntryはTypInfoユニットで宣言されているため、それを機能させるにはそれを使用する必要があります。

于 2010-10-10T03:41:16.630 に答える