なぜ集合型プロパティにはIncludeは使えないのか

解決


Fusa  URL  2008-02-21 00:52:30  No: 29849

ふとした疑問です。

procedure TForm1.Button1Click(Sender: TObject);
begin
  if fsBold in Label1.Font.Style then
  begin
    Label1.Font.Style := Label1.Font.Style - [fsBold];
//    Include(Label1.Font.Style, fsBold);
  end else
  begin
    Label1.Font.Style := Label1.Font.Style + [fsBold];
  end;
end;

なぜか、コメントアウトしている行をコンパイルしようとすると
[DCC エラー] …: E2064 代入できない左辺値です
というエラーになってしまいます。

今更ですが、Includeはどうして集合型プロパティに対して
実行できないのでしょうか?

集合型変数には使えるけど
集合型プロパティには使えない
IncludeやExclude指令は存在意味があるんでしょうか?


風来坊  2008-02-21 06:40:59  No: 29850

第1引数が参照渡しだからかなぁ…

THoge = class
private
  function Get: Integer;
  procedure Put(Value: Integer);
public
  property Foo: Integer read Get write Put; 
end;

プロパティはこんな感じだったりするので参照渡しができないんじゃないかと?
Inc(Form1.Width) なんてのも怒られますからね。

まぁ、存在意味があるかどうかは別として…
Include, Exclude は自分ではよく使う。


Fusa  2008-02-21 22:04:14  No: 29851

ああ、そうか。
なるほど。そういえばそうですね。

私もIncludeは結構好きなのですが
同じ集合型として同じ記述方法ができたらいいなと
思ったのですが、難しそうですね。

ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加