下例是一個顯示兩個定義在運行時接口的只讀屬性的例子
type
TSampleComponent = class(TComponent)
private
FTempCelsius: Integer; { 具體實現是private }
function GetTempFahrenheit: Integer;
public
property TempCelsius: Integer read FTempCelsius; { 屬性是public }
property TempFahrenheit: Integer read GetTempFahrenheit;
end;
function GetTempFahrenheit: Integer;
begin
Result := FTempCelsius *
end;
既然用戶在設計時不能改變public部分的屬性的值
⑷ 定義設計時接口
將對象的某部分聲明為published
下面是一個published屬性的例子
TSampleComponent = class(TComponent)
private
FTemperature: Integer; { 具體實現是 private }
published
property Temperature: Integer read FTemperature write FTemperature; { 可寫的 }
end;
派送(Dispatch)這個概念是用來描述當調用方法時
這三種派送方法的類型是
● 靜態的
● 虛擬的
● 動態的
虛方法和動態方法的工作方式相同
⑴ 靜態方法
如果沒有特殊聲明
靜態方法的基本好處是派送相當快
靜態方法的另一個不同之處是當被另一類型繼承時不做任何改變
你不能覆蓋靜態方法
在下列代碼中
type
TFirstComponent = class(TComponent)
procedure Move;
procedure Flash;
end;
TSecondComponent = class(TFirstComponent)
procedure Move; { 盡管有相同的聲明
function Flash(HowOften: Integer)
end;
⑵ 虛方法
調用虛方法與調用任何其它方法一樣
為聲明一個新的方法
當你從已有對象獲得新的對象
覆蓋一個方法是擴展它
● 祖先對象中不存在該方法
● 祖先對象中相同方法是靜態的
● 聲明與祖先對象的(如名字
下列代碼演示兩個簡單的部件
type
TFirstComponent = class(TCustomControl)
procedure Move; { 靜態方法 }
procedure Flash; virtual; { 虛 方 法 }
procedure Beep; dynamic; { 動態虛擬方法 }
end;
TSecondComponent = class(TFirstComponent)
procedure Move; { 聲明了新的方法 }
procedure Flash; override; { 覆蓋繼承的方法 }
procedure Beep; override; { 覆蓋繼承的方法 }
end;
⑶ 動態方法
動態方法是稍微不同於虛擬方法的派送機制
定義動態方法時
與對象虛擬方法創建入口不同的是dynamic給方法賦了一數字
⑷ 對象與指針
在Object Pascal中
返回目錄
編輯推薦
Java程序設計培訓視頻教程
J
Visual C++音頻/視頻技術開發與實戰
Oracle索引技術
ORACLE
Java程序性能優化
C嵌入式編程設計模式
Android游戲開發實踐指南
[
From:http://tw.wingwit.com/Article/program/Delphi/201311/25124.html