全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:724
推到 Plurk!
推到 Facebook!

請教一下:任何元件都可以新增原本沒有的property嗎?

答題得分者是:miyu
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-14 09:00:39 IP:61.220.xxx.xxx 未訂閱
上一次在版上發問有關如何在Panel的特定位置上寫文字,從那裡學到了可以用將Panel新增一個property的方法來達成,但是心生一問:是否元件要新增property是否有什麼限制?還有,新增的property會不會有任何的副作用呢(比如影響程式執行速度或記憶體消耗等等…)? 謝謝各位!
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-16 02:18:58 IP:61.217.xxx.xxx 未訂閱
引言: 上一次在版上發問有關如何在Panel的特定位置上寫文字,從那裡學到了可以用將Panel新增一個property的方法來達成,但是心生一問:是否元件要新增property是否有什麼限制?還有,新增的property會不會有任何的副作用呢(比如影響程式執行速度或記憶體消耗等等…)? 謝謝各位!
property的影響, 記憶體是一定會的, 執行速度則應該是runtime effect. 首先, property 這個東西, 說起來其實只是compiler玩了一個花招, 幫你對某一個變數 (或是說某一個token value) 作對應的處理. 假設有這麼一個東西好了: type TFooColors = class (TPersistent) private FBackground: TColor; procedure SetBackground(const Value: TColor); ... published property Background: TColor read FBackground write SetBackground; ... end; var FooColors: TFooColors; TmpColor: TColor; L1: FooColors.FBackground := clRed; L2: FooColors.SetBackground(clRed); L3: FooColors.Background := clRed; L4: TmpColor := FooColor.Background; 試著戴上compiler designer的帽子去想, 你會怎麼作? L1: 不用說, 這個敘述違反了Object的存取規則, 它試圖去存取 private section 的資料, 您當然是當場給您的 user 一個錯誤訊息. L2: 一樣, procedure 位於 private section, 這個動作也違反了存取規則, 您當然一樣是給您的 User 一個 error message. L3/L4 是合法的, 我們分開來討論: L3這個動作, 根據的定義, 位於assign operator左邊是被設定, 被寫入(write)的, 而assign operator右邊則是要設的值. 然後你會去查詢 class 定義, 你知道 'Background' 事實上是一個 property, 當 'Background' 被設定(write)的時候, 你要對應到 SetBackground 這個 property. 再來, 'Background' 定義於 class 內, 因此, 'Background' 有權去存取 private section 的函式. 所以, 你的compiler會生出如下的 pseudo-code: FooColors.SetBackground(clRed); 是的, 這個動作對 User 來講是不合法, 但請記住你現在是 compiler designer. 再來, L4 也是類似, compiler 會生出這樣的 Code: TmpColor := FooColor.FBackground; 所以你看到了, property 事實上說穿了只是一個讓code變得更簡便的包裝而已, 他本身並沒有什麼神秘之處. 同時, 這些東西什麼時候會用到你的 cpu time? 想當然是被 read 及 wirte 的時候. 也就是說, 影響力是在runtime的時候. 至於記憶體消耗, 當然了, 如果你為你的 class 增加了一個欄位或是函式, 這些東西理所當然的會佔用你的記憶體吧?
danielj
初階會員


發表:65
回覆:135
積分:40
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-20 09:00:07 IP:61.220.xxx.xxx 未訂閱
多謝miyu的說明,不過乍看之下還看不太懂,可能要再多看幾次…
系統時間:2024-06-13 19:28:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!