为什么System.Include在属性提供Set时不起作用?

时间:2013-05-05 20:29:57

标签: delphi properties include set

为什么System.Include在属性提供Set时不起作用?

TMyItem = (miOne, miTwo, miThree); 

TMyItems = set of TMyItem; 

TSomeClass = class
  private 
    FItems: TMyItems;
  protected
    procedure SetItem(val : TSetItems);
    function GetState : TSetItems;
  public
    property Items : TMyItems read GetMyItems write SetMyItems;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  c: TSomeClass;
begin
  c:=TSomeClass.Create;
  c.Items:=c.Items + [miTwo];  //WORKS OK
  Include(c.Items,miTwo); //COMPILE ERROR
end;

我正在使用Win32 BDS 2006.这是错误,功能还是操作员错误?

谢谢,戴夫

1 个答案:

答案 0 :(得分:2)

不同之处在于第一个版本是对属性的赋值,而第二个版本是传递给 var 参数的属性。 Delphi编译器认为将属性(甚至是读/写属性)传递给 var 参数是错误的。我认为这没有任何意义,但这就是它的工作方式。