使用者操作實例,編寫者建立新類型。建立新元件兩大動機:
核心目標:建立可重用物件。預先規劃設計可節省大量未來維護成本。若發現重複設定相同屬性或呼叫相同方法,即應封裝為新元件。繼承現有元件(如 TListBox)或抽象基類(TComponent、TControl)均可,但無法移除祖先屬性,若需隱藏則從更高層祖先繼承。
Object Pascal 提供四層存取控制,定義元件介面:
| 層級 | 用途 |
|---|---|
private | 隱藏實作細節 |
protected | 定義開發者介面(衍生類別可見) |
public | 定義執行期介面 |
published | 定義設計期介面(含 RTTI) |
所有層級在單元範圍生效。未指定者預設為 published。
private)單元外代碼不可存取,單元內如 public 可見。修改實作不影響使用者代碼。範例:TSecretForm.FSecretCode 於外部單元存取將編譯錯誤。
protected)單元外不可見,但衍生類別單元可存取。允許元件編寫者修改內部行為而不暴露給使用者。
public)任意代碼可存取。適用於設計時無意義項目(唯讀屬性、依賴執行期資訊的方法)。範例:TempCelsius(讀欄位)、TempFahrenheit(讀函數轉換)均為 public 唯讀屬性。
published)屬於 public 且產生 RTTI。只有 published 屬性出現在物件檢視器。定義使用者欲於設計期客製化的特徵。範例:Temperature 屬性可讀寫、可見於設計期。