Rtti を使用して、 aが、またはTRttiMethod
としてマークされているかどうかを判断することは可能ですか?overload
override
abstract
前もって感謝します。
Rtti を使用して、 aが、またはTRttiMethod
としてマークされているかどうかを判断することは可能ですか?overload
override
abstract
前もって感謝します。
過負荷:これにはRTTIフラグはないと思いますが、同じ名前のメソッドが複数あるかどうかを確認できます。それは完璧ではありませんが、おそらくあなたが得ようとしているのと同じくらい近いでしょう。
オーバーライド:まず、メソッドが仮想であることを確認します。(または動的またはメッセージディスパッチ。)次に、クラスの祖先をチェックして、同じ名前とVirtualIndexプロパティを持つ他のメソッドを探します。
要約:rtti.pasの実装mfAbstract
セクションの奥深くに、一連のメソッドデータフラグがあり、と呼ばれるものがあり、として定義されてい1 shl 7;
ます。これを参照するコードはありませんが、コンパイラによって生成されたRTTIに実装されています。メソッドのTRttiMethodリファレンスがある場合は、次のようにテストできます。
IsVirtual := PVmtMethodExEntry(method.Handle).Flags and (1 shl 7) <> 0;
PVmtMethodExEntryはTypInfo
ユニットで宣言されているため、それを機能させるにはそれを使用する必要があります。