Delphi中的嵌套属性

时间:2011-08-24 09:55:14

标签: delphi attributes annotations nested

有没有办法在Delphi中使用嵌套属性?目前我正在使用Delphi XE。

例如:

TCompoundAttribute = class (TCustomAttribute)
public
  constructor Create (A1, A2 : TCustomAttribute)
end;

用法是

[ TCompoundAttribute (TSomeAttribute ('foo'), TOtherAttribute ('bar')) ]

目前这会导致内部错误。这将是在属性上创建一些布尔表达式的一个很好的功能。

1 个答案:

答案 0 :(得分:0)

我认为你的意思是create method的默认属性。

这样的事情应该有效:

unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFoo = class
  private
    FA1: string;
    FA2: string;
    { Private declarations }
  public
    procedure Show;
    constructor Create (a1: string = 'foo'; a2: string = 'bar');
  end;

var
  o : Tfoo;

implementation

{$R *.dfm}

procedure Tfoo.show;
begin
  ShowMessage(FA1 + ' ' + FA2);
end;

constructor Tfoo.create (a1: string = 'foo'; a2: string = 'bar');
begin
  FA1 := a1;
  FA2 := a2;
end;


begin
  o := Tfoo.create;
  o.show;   //will show 'foo bar'
  o.Free;

  o := Tfoo.create('123');
  o.show;   //will show '123 bar'
  o.Free;

  o := Tfoo.create('123', '456');
  o.show;   //will show '123 456'
  o.Free;

  //etc..
end.