property 的用途是什麼 ? |
答題得分者是:Coffee
|
pcboy
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |