次のセマンティックの違いは何ですか:
RttiType.TypeKind と RttiType.Name ?
原則として、名前から TypeKind を推測できないのでしょうか。
次のセマンティックの違いは何ですか:
RttiType.TypeKind と RttiType.Name ?
原則として、名前から TypeKind を推測できないのでしょうか。
TypeKind
とのName
プロパティTRttiType
はまったく別のものです。
TypeKind
あなたがどのタイプか教えてくれます。TTypeKind
これは、列挙型で定義された 23 の異なるオプションの 1 つです。Name
あなたがどのタイプか教えてくれます。これは文字列であり、可能な値の数に制限はありません。異なる型は (通常) 異なる名前を持ちますが、同じTypeKind
. たとえば、この簡単なデモンストレーションを考えてみましょう。
program RttiDemo;
{$APPTYPE CONSOLE}
uses
Rtti;
procedure Main;
var
Context: TRttiContext;
TObjectType, TInterfacedObjectType: TRttiType;
begin
TObjectType := Context.GetType(TObject);
TInterfacedObjectType := Context.GetType(TInterfacedObject);
Writeln(TObjectType.Name);
Writeln(TInterfacedObjectType.Name);
Assert(TObjectType.TypeKind=TInterfacedObjectType.TypeKind);
end;
begin
Main;
Readln;
end.
出力は次のとおりです。
TObject TInterfacedObject
したがって、種類と名前はまったく異なるものであるため、型名から型の種類を推測することはできません。