2

次のセマンティックの違いは何ですか:

RttiType.TypeKind と RttiType.Name ?

原則として、名前から TypeKind を推測できないのでしょうか。

4

2 に答える 2

3

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

したがって、種類と名前はまったく異なるものであるため、型名から型の種類を推測することはできません。

于 2013-06-04T09:59:06.283 に答える