首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

深入理解 Delphi 類(十):方法基礎完整指南——過程/函數、參數、重載、遞歸、回調、方法指針

     編輯:Delphi

前言

方法是類的行為單元,脫離類的過程/函數同樣遵循同一套規則。本文從零開始系統講解:過程與函數定義、參數傳遞四種模式、默認參數、調用約定、實現區/接口區聲明、前向聲明、開放數組、指針參數、重載、方法指針類型、回調函數、遞歸函數、傳址參數限制等 29 個核心知識點,配備可直接運行的代碼片段。

核心知識點速覽

  1. 過程/函數:procedure 無返回值,function 有返回值 (Result 或函數名)。
  2. 參數分隔:聲明用 ;,調用用 ,。
  3. 同類型參數合併:x,y,z: Integer。
  4. 返回值:推薦 Result,可參與運算,支持類型轉換 (Byte(Result) := b)。
  5. 無返回值函數可作過程調用:編譯器允許但不推薦。
  6. 無參調用可省略括號:MyFun = MyFun()。
  7. 默認參數:s2: string = '默認值',必須在非默認參數之後。
  8. 四種參數模式:值傳遞 (默認)、var 傳址、out 輸出、const 常量 (編譯器優化,不可修改)。
  9. 實現區函數僅單元可見;需跨單元必須在 interface 區聲明(uses 之後)。
  10. 類內聲明即為方法:實現需加類名前綴 TForm1.MyFun。
  11. 跨單元調用:uses Unit2,必要時 Unit2.MyFun 避免衝突。
  12. 實現區順序敏感:前向調用後向需 forward;interface 區聲明則無順序限制。
  13. 局部過程/函數:在過程內嵌套定義,捕獲外層變量。
  14. 靜態數組參數:必須先定義類型 type IntArray = array[0..9] of Integer; 再用作參數。
  15. 開放數組參數:const arr: array of Integer,支援動態數組、常量數組 [1,2,3]。
  16. 指針參數:無 var 但傳 @Var 實際仍可修改原變量(地址傳遞本質)。
  17. 重載:同名不同參數列表 + overload;避免與默認參數產生歧義。
  18. 方法即指針:@MyProc 獲取代碼地址。
  19. 方法類型:type TFunType = function(x: Integer): Integer; 定義兼容簽名的類型。
  20. 回調函數:將方法類型變量作參數傳遞,實現控制反轉。
  21. 遞歸函數:自我調用,需終止條件(如目錄遍歷、階乘)。
  22. 傳址參數不能傳常量:var x: Integer 調用必須傳變量。

精選代碼範例

開放數組求和

function Sum(const arr: array of Integer): Integer;
var i: Integer;
begin
  Result := 0;
  for i in arr do Result := Result + i;
end;
{調用} Sum([1,2,3]); {6}
var a: array of Integer; SetLength(a,10); ... Sum(a);

回調函數模式

type TCallback = function(i: Integer): Integer;
function DoubleIt(i: Integer): Integer; begin Result := i*2; end;
function Execute(x: Integer; cb: TCallback): Integer; begin Result := cb(x); end;
{使用}
var cb: TCallback; cb := DoubleIt; Execute(4, cb); {8}

遞歸遍歷目錄

procedure GetDirs(dirName: string; List: TStrings);
var sr: TSearchRec; dir: string;
const attr = faDirectory;
begin
  dirName := ExcludeTrailingBackslash(dirName) + '\';
  if FindFirst(dirName + '*.*', attr, sr) = 0 then
    repeat
      if (sr.Attr = attr) and (sr.Name <> '.') and (sr.Name <> '..') then begin
        List.Add(dirName + sr.Name);
        GetDirs(dirName + sr.Name, List); {遞歸}
      end;
    until FindNext(sr) <> 0;
  FindClose(sr);
end;

常見陷阱總結表

陷阱現象規避
重載 + 默認參數調用歧義同名函數勿同時使用重載和默認參數
指針參數無 var誤以為不可修改明確語義用 var/out,或文檔註明
遞歸無終止條件堆疊溢位必設基線條件,必要時用迭代替代
forward 重複實現編譯錯誤僅聲明一次,實現一次
靜態數組直接作參數編譯錯誤先 type 定義類型

總結

方法是 Delphi 程式邏輯的基本構建塊,精通參數傳遞語義、重載規則、遞歸模式、回調機制、方法指針類型,能編寫出靈活復用、高性能、易維護的核心算法與框架代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved