3

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

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。这是错误、功能还是操作错误?

谢谢,戴夫

4

1 回答 1

2

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

于 2013-05-05T20:40:12.033 回答