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

property 的用途是什麼 ?

答題得分者是:Coffee
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-03 16:16:35 IP:61.219.xxx.xxx 未訂閱
Unit1 中輸入 Form2. 時候看到 var P1 和 property P2
請問一下 P1 和 P2 的使用上有什麼差異 ?
type
TForm2 = class(TForm)
private
{ Private declarations }
pP2 : String;
public
P1 : String;
property P2: string read pP2 write pP2;
{ Public declarations }
end;
看不懂線上說明(中文小弟寫的)
A property, like a field, defines an attribute of an object.
屬性, 就像一個欄位, 定義了物件的屬性
But while a field is merely a storage location whose contents can be examined and changed,
a property associates specific actions with reading or modifying its data.
當欄位僅是可檢查和改變的儲存位置時候, 僅有屬性相關的行為可以讀取和修改它的資料 ?
問: 只要宣告 public , 不是物件中的每個 method 都可以讀取到嗎? 怎樣特別定義和屬性相關的行為 ?
Properties provide control over access to an object's attributes, and they allow attributes to be computed.
屬性提供了物件屬性的控制權, 允許屬性可被計算
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-03 16:44:50 IP:220.130.xxx.xxx 訂閱
A property, like a field, defines an attribute of an object. But while a field is merely a storage location whose contents can be examined and changed, a property associates specific actions with reading or modifying its data. Properties provide control over access to an object attributes, and they allow attributes to be computed.
The declaration of a property specifies a name and a type, and includes at least one access specifier. The syntax of a property declaration is

property就像是一個資料成員,定義了一個物件屬性,但是資料成員僅僅是一個存放資料的位置以供讀取及修改。而properyt則對於其讀取與寫入關聯其指定行為。
properties提供對於物件屬性存取的控制,並且允許這些屬性可以被操作。
property的宣告包含其變數名稱與型態,並包含指少一個存取標識(read or write),property宣告格式如下:

property propertyName[indexes]: type index integerConstant specifiers;


//下略

所以property就是說,當你定義的資料必須要符合或引起某項行為時,那麼你就必須要宣告property,而不是單純的宣告成public
若使用public,那麼你得在其它使用到這個變數的地方去檢查這個變數是否合法//應該說這樣的輸入值本來就不該存在

比如說TMyCustomList有一個capacity : integer,那麼你如果嘗試去設定它為負值,就會造成整個List的操作失敗,
所以應該是要在capacity被設值的時候就要去檢查輸入值是否合法,如果現在的已經擁有的數量超過輸入的capacity
那麼是不是就應該要把超過的部份free掉?(就跟SetLength( S, 0)的表面意義是一樣的,因為0就是沒長度,原先有的資料全部清空)
如果原有的空間不夠,那麼是需要再申請的,這一連串動作都是因為設定capacity造成的,
所以必須在capacity時就完成這些事,這也就是property的用意之一。
再者,有某些數值是必須計算取得,一般來說我們會去使用getXXX之類的函式來回傳,
但是就語意上而言,我們可以把它設為property,那麼用的人就只要知道有這個property,而不是去使用getXXXX之類的函式

當你需要使用property時,你可以單單的指定read某個變數,這就表示這個值是內部操作,而不供外界改變
如果你read or write使用到某些函式,那麼你也跟著必須implement那些函式並符合格式
property Capacity read GetCapacity write SetCapacity(ACapacity);
是從GetCapacity這個變數或者是無參數的function return值,SetCapacity就是透過讀取ACapacity來設定Capacity這個property
Set的時候,只要透過AList.Property = MCapacity,那麼物件就會自動的去引用SetCapacity來設定Capacity

(完)
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
g9221712
高階會員


發表:145
回覆:344
積分:162
註冊:2006-07-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-03 23:16:56 IP:220.134.xxx.xxx 訂閱
Coffee 前輩:
您解釋的真是很棒!看了我要躲起來練功了!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」
程式寫的越久,卻發現自己越來越不會寫程式!
系統時間:2024-03-29 19:20:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!