type
TLight = class
private
Ftimer : TTimer;
property IsAutoRotating: Boolean read Ftimer.Enabled;
很明顯的價值,這不能編譯,但爲什麼不和如何解決這個(最好不保持這種狀態在一個單獨的變種。
type
TLight = class
private
Ftimer : TTimer;
property IsAutoRotating: Boolean read Ftimer.Enabled;
很明顯的價值,這不能編譯,但爲什麼不和如何解決這個(最好不保持這種狀態在一個單獨的變種。
吸氣和屬性的設置器應該是類的一個方法或它的父 - 或 - 類的一個字段或它的父
由於FTimer.Enabled既不是上述構建體不會工作 您可能會創建一個getter函數和setter方法將返回FTimer(吸氣)的這個屬性和設置FTimer(二傳)的這個屬性:
類型:
property Enabled: Boolean read GetEnabled write SetEnabled;
現在按Ctrl-Shift-C類完成。現在爲您創建2種方法。
在吸氣類型:
Result := FTimer.Enabled;
在二傳手類型:
FTimer.Enabled := Value;
的Et瞧!
。
您的代碼不會編譯,因爲屬性讀寫說明符必須引用該類的字段或方法。 Ftimer.Enabled
既不是這些。
爲了實現IsAutoRotating
屬性,你需要創建一個getter函數:
type
TLight = class
private
Ftimer : TTimer;
function GetIsAutoRotating: Boolean;
public
property IsAutoRotating: Boolean read GetIsAutoRotating;
end;
function TLight.GetIsAutoRotating : Boolean;
begin
Result := Ftimer.Enabled;
end;
而且,您可能希望將屬性IsAutoRotating移動到類聲明的'published'部分。 – 2010-02-01 16:57:05
並防止未分配FTimer時產生的AV。 – skamradt 2010-02-01 17:22:36
爲什麼你會推薦發佈那個屬性,PA?我沒有看到證據表明該屬性需要通過字符串名稱來訪問。 – 2010-02-02 03:28:55
是什麼讓你認爲它會或應該編譯?回答這個問題將有助於確定你對問題「原因」部分的期望是什麼樣的回答。 – 2010-02-01 15:35:53
Rob +如果ftimer是NIL會怎麼樣? – 2010-02-01 16:19:49