程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 理解Delphi的類(十一) - 深入類中的方法(6)

理解Delphi的類(十一) - 深入類中的方法(6)

日期:2017/1/13 9:11:37      編輯:Delphi

{使用起來沒看出區別!}

[9] - 不能被覆蓋的方法與不能被繼承的類

{
  抽象類是一定要被繼承才可以使用的; 抽象方法是一定要被覆蓋才可以使用的.
  現在說的是不能被覆蓋的方法, 與不能被繼承的類.
}
//譬如:
TA = class
 procedure Proc; virtual; {TA 中的虛方法, 將要被覆蓋}
end;
TB = class(TA)
 procedure Proc; override; {覆蓋}
end;
TC = class(TB)
 procedure Proc; override; {再次覆蓋}
end;
//假如要設定 TB.Proc 為最終方法, 不允許再覆蓋了, 需要 final 指示字.
TA = class
 procedure Proc; virtual; {TA 中的虛方法, 將要被覆蓋}
end;
TB = class(TA)
 procedure Proc; override; final; {最終覆蓋}
end;
TC = class(TB)
 //procedure Proc; override; {再覆蓋不行了}
end;
//用 class sealed 是不能被繼承的
TMyClass = class sealed(TObject)
//...
end;
[10] - 構造方法與析構方法

//構造方法就是對象建立時調用的方法; 析構方法就是對象銷毀時調用的方法. 如:TMyClass = class(TObject)
public
 constructor Create;      {構造方法}
 destructor Destroy; override; {析構方法}
end;
{幾個要點:
 這兩個方法都可以追溯到所有類的祖先類 TObject;
 它們都屬於類方法, 盡管沒有 class 標識符;
 但和類方法也有區別: 一般的類方法不能使用類中非靜態數據; 但它們可以.
 必須使用 constructor 和 destructor 來定義, 但名稱未必是: Create 與 Destroy;
 如果不使用 Create 與 Destroy 的命名會帶來很多麻煩, 沒必要嘗試.
 我們自己的代碼在 Create 中是執行在父類的 Create 代碼之後; 在 Destroy 中執行 在之前;
 所以, 一般會用這樣的語句格式: 
}
constructor TMyClass.Create;
begin
 inherited;
 //...
end;
destructor TMyClass.Destroy;
begin
 //...
 inherited;
end;
{
 Create 是我們用得最多的方法; 但 Destroy 是我們用得最少的方法;
 因為通過 Free 調用 Destroy 更安全一些.
 Destroy 是一個虛方法; Create 在祖先類中雖然是靜態方法, 但在很多實用的類中也 成了虛方法;
 所以在覆蓋或重載時應區別對待.
}
// Create 應該是受到編譯器特別對待的一個方法, 譬如:
TMyClass = class(TObject)
public
 constructor Create;
end;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved