【问题标题】:how to set and get properties in delphi using RTTI concept如何使用 RTTI 概念在 delphi 中设置和获取属性
【发布时间】:2018-02-14 04:27:00
【问题描述】:

我已经完成了我的属性的方法定义为 get 和 set(fname,lname,address)。我也完成了 propcount 但它抛出了一个错误。所以任何人都可以给我一个示例代码我应该如何设置运行时的属性。 所以我的问题是我该怎么做??

【问题讨论】:

标签: delphi-7


【解决方案1】:

您可以使用变体数据类型,它提供了灵活的通用数据类型。

// Show the type of a variant
procedure ShowBasicVariantType(varVar: Variant);
var
  typeString : string;
  basicType  : Integer;

begin
  // Get the Variant basic type :
  // this means excluding array or indirection modifiers
  basicType := VarType(varVar) and VarTypeMask;

  // Set a string to match the type
  case basicType of
    varEmpty     : typeString := 'varEmpty';
    varNull      : typeString := 'varNull';
    varInteger   : typeString := 'varInteger';
    varInt64     : typeString := 'varInt64';
    varByte      : typeString := 'varByte';
    varDate      : typeString := 'varDate';
    varString    : typeString := 'varString';
    varAny       : typeString := 'varAny';
  end;

  // Show the Variant type
  writeln('Variant type  = '+typeString);
end;

在主程序中:

var
  myVar : variant;
begin
  // Assign various values to a Variant
  // and then show the resulting Variant type
  writeln('Variant value = not yet set');
  ShowBasicVariantType(myVar);

  // Simple value
  myVar := 123;
  writeln('Variant value = 123');
  ShowBasicVariantType(myVar);

  // Calculated value using a Variant and a constant
  myVar := myVar + 456;
  writeln('Variant value = 123 + 456');
  ShowBasicVariantType(myVar);

  myVar := 'String '+IntToStr(myVar);
  writeln('Variant value = String 579');
  ShowBasicVariantType(myVar);

  readln;
end.

【讨论】:

  • 我不想使用泛型类型。我有一个过程,其中我将对象作为参数传递并尝试使用 RTTI 概念。
  • 我已经更新了答案,我认为最简单的方法是使用变体类型
  • 变体类型使用更多资源并且速度较慢。尽可能避免它们
猜你喜欢
  • 2011-06-10
  • 2011-11-30
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多