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

Property 的存取特性

 
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-05-12 07:33:52 IP:211.74.xxx.xxx 未訂閱
這個問題一直困擾我多年 我New 一個TForm後 在Interface 段加以修改後如下 ********************************************************************************** unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private declarations } sPrivate:String; public { Public declarations } sPublic:String; end; var Form1: TForm1; sTest:String; implementation ... ***************************************************************************************** 1. 在Private或Pulic 區段宣告的變數(如上例中的sPrivate 及sPublic)各有其特性 那在var 宣告的變數(如上例中的sTest)其特性是Private 或者是Public呢 2. 上例中的Button1 必須宣告中Private之前的區段, 那其特性又為何呢? 是Public or Private? 3. 何種欄位可宣告在 TForm1 = class(TForm) 及Private 中間 具有什麼特性
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-05-12 08:25:12 IP:61.219.xxx.xxx 未訂閱
這個問題一直困擾我多年 好耶!開始認真思考以前忽略的細節喔! 我New 一個TForm後 在Interface 段加以修改後如下 ********************************************************************************** unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; private { Private declarations } sPrivate:String; public { Public declarations } sPublic:String; end; var Form1: TForm1; sTest:String; implementation ... ***************************************************************************************** 1. 在Private或Pulic 區段宣告的變數(如上例中的sPrivate 及sPublic)各有其特性 簡單說sPrivate只給自家人用(就是在unit Unit1;這一家人),若有另外一家子叫Unit Unit2;其引用Uses unit1;時是無法引用到TForm.sPrivate,但可以引用到TForm.sPublic 那在var 宣告的變數(如上例中的sTest)其特性是Private 或者是Public呢 在interface與implementation之間宣告的變數或函數都是Public,也就是供別人使用的界面區段,在implementation之後宣告的變數或函數都是Private只供本身的Unit使用,但要注意Pascal向前參考的特性. 2. 上例中的Button1 必須宣告中Private之前的區段, 那其特性又為何呢? 是Public or Private? Button1當然也是Public,一般來說,我們會將可視覺化的物件宣告在Class(TFrom)之後private之前 3. 何種欄位可宣告在 TForm1 = class(TForm) 及Private 中間 具有什麼特性 需要被別的Unit引用的視覺化物件/或自訂函數都可以宣告在TForm1 = class(TForm) 及Private 中間(但是變數不可宣告在此). 我的結論如下: 1.由Delphi IDE中拉出來的元件或物件會自動宣告在TForm1 = class(TForm) 及Private 中間 2.自己宣告的物件或變數或函數若要開放給其它unit引用時就宣告在Public中 3.自己宣告的物件或變數或函數若不要開放給其它unit引用時就宣告在Private中 4.與TFrom無關的變數或函數,但要開放給其它unit引用,才宣告在implementation之前,type TForm1 = class(TForm)之後 5.Unit1內部臨時使用的變數或函數,才宣告在implementation之後! 以上言論若有疏失之處歡迎指正,謝謝! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
will
中階會員


發表:176
回覆:135
積分:62
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-05-12 16:36:19 IP:211.74.xxx.xxx 未訂閱
謝謝版主
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-05-13 09:27:34 IP:163.29.xxx.xxx 未訂閱
以上說明可能有些小問題 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) //此處開始定義TForm1之類別 Button1: TButton; //此處為published private { Private declarations } sPrivate:String; protected sprotect:string; //此區Create Form時不自動產生 public { Public declarations } sPublic:String; end; //結束TForm2之類別定義 var //此處為全域變數,其他Unit只須Uses此Unit即可直接使用 //與TForm1類別無直接關係 Form1: TForm1; sTest:String; implementation var //此處可宣告僅此Unit內使用之全域變數 ss:string; ... 1. 類別定義與變數宣告完全不同 由TForm1 = class(TForm) 到End;只是在定義TForm1之類別 因此無論在published,public,protect,private任何部分之定義均為類別定義之一部分, 須由此Class Create Instance後才有意義,且若Create多個Instance,則每一Instance均有自己的一分. 變數宣告則依其宣告位置而有不同之Scope Implementation 前為全域變數, 之後為僅此Unit可用之變數,Function或Procedure內則為Local變數 2. 以上面之程式為例,假設有另一Unit2 a. uses unit1可直接使用sTest b. 無法存取ss c. 以Tform1 Create一Instance後可存取此Instance內之spublic var f:TForm1; begin f:=TForm1.create(application); f.spublic... //spublic為f object之一部分 end; 3. protected 若在Unit2中定義一Class繼承TForm1, 則在Unit2中可Access sprotect, 也可在此Class 中將Protected部分改為public [NOTE]利用此特性可使用VCL元件中部分原為Protect之Property,如TDBGrid之FixedCols,TopRow,OnMouseWheel等 4. published 在private之前未標示之區域為published(不是public), 存取Scope與public同,但會寫入VMT, 故在元件設計時宣告為published之propert才會在DesignTime出現在Object Inspector中
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-05-13 09:43:56 IP:61.219.xxx.xxx 未訂閱
引言: 以上說明可能有些小問題 ....
再度感謝前輩ccchen會員深入淺出的解說,看來我的OOP觀念還有需要再加強的地方,正所謂 一山還有一山高 ,教學相長,自己獲益更多! 誠懇邀請前輩ccchen會員擔任"Object Pascal物件導向討論區"版主,不知意下如何? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-05-13 13:30:58 IP:163.29.xxx.xxx 未訂閱
引言:
引言: 以上說明可能有些小問題 ....
再度感謝前輩ccchen會員深入淺出的解說,看來我的OOP觀念還有需要再加強的地方,正所謂 一山還有一山高 ,教學相長,自己獲益更多! 誠懇邀請前輩ccchen會員擔任"Object Pascal物件導向討論區"版主,不知意下如何? ~~~Delphi K.Top討論區站長~~~
只要有空, 隨時歡迎討論. 有幫的上忙的地方也願盡力,至於"版主", 實在不太敢, 且操作環境也不是很熟 不過有的時候, 實在想長篇大論一番(如Class 之基本觀念應可用更多之實例說明), 想Post較完整之程式不知如何處理
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-05-13 14:58:09 IP:61.219.xxx.xxx 未訂閱
只要有空, 隨時歡迎討論. 有幫的上忙的地方也願盡力,至於"版主", 實在不太敢, 且操作環境也不是很熟 您實在太客氣了,擔任OP的版主應該是當之無愧,至於"操作環境也不是很熟",您是指本討論區的操作不熟嗎? 本站簡介中有一些本站發表文章的方法與技巧,請見: http://delphi.ktop.com.tw/forum.asp?FORUM_ID=88 不過有的時候, 實在想長篇大論一番(如Class 之基本觀念應可用更多之實例說明), 想Post較完整之程式不知如何處理 歡迎!歡迎!真是太好了! 要上傳程式可以放在"會員作品發表區":http://delphi.ktop.com.tw/forum.asp?FORUM_ID=79 選"發表新主題",在"上傳檔案:"後面的按紐"瀏覽..."選擇您要上傳的檔案名稱 (最好將所有程式用Winzip壓縮成.ZIP檔後再上傳) 若是要發表整篇文章,我正在寫一個電子書的瀏覽工具軟體,可以將壓縮檔內的整篇HTML(可以數個HTML與圖檔或是整個目錄)流覽出來,預計再幾天就可完工. 屆時您就可以用 FrontPage編寫文章也可以含圖,也可以數個HTML連結,整個目錄壓縮之後變成一個BOOK.ZIP壓縮檔,就可以上傳至本站給網友下傳Offline閱讀您的大作..細節等軟體出來再告訴您! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
系統時間:2024-03-28 23:24:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!