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

Delphi 類別入門範例:數字盒子——封裝計數邏輯與表單交互

     編輯:Delphi

本文通過一個極簡的 TNumBox 類別,演示 Delphi 類別的基本結構:私有字段、公開方法、建構子/解構子缺省、表單建立/銷毀時的實例管理、按鈕事件驅動業務邏輯。

類別單元:NumBox.pas

unit NumBox;

interface

type
  TNumBox = class
  private
    FCount: Integer;  { 內部計數器 }
  public
    procedure AddOne;
    procedure AddFive;
    procedure ZeroCount;
    function GetCount: Integer;
  end;

implementation

procedure TNumBox.AddOne;
begin
  Inc(FCount);
end;

procedure TNumBox.AddFive;
begin
  Inc(FCount, 5);
end;

procedure TNumBox.ZeroCount;
begin
  FCount := 0;
end;

function TNumBox.GetCount: Integer;
begin
  Result := FCount;
end;

end.

表單單元:Unit1.pas

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;  { +1 }
    Button2: TButton;  { +5 }
    Button3: TButton;  { 歸零 }
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses NumBox;

var
  NumBox1: TNumBox;  { 全域變數持有實例 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  NumBox1 := TNumBox.Create;  { 建立實例 }
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  NumBox1.AddOne;
  Caption := IntToStr(NumBox1.GetCount);  { 顯示於標題欄 }
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  NumBox1.AddFive;
  Caption := IntToStr(NumBox1.GetCount);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  NumBox1.ZeroCount;
  Caption := IntToStr(NumBox1.GetCount);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  NumBox1.Free;  { 釋放實例 }
end;

end.

關鍵點解析

  1. 封裝:FCount 為 private,外部只能透過 AddOne/AddFive/ZeroCount/GetCount 存取。
  2. 建構子/解構子:未顯式聲明,編譯器自動生成無參數 Create、Destroy(繼承自 TObject)。
  3. 實例生命週期:FormCreate 建立,FormDestroy 釋放,確保不洩漏。
  4. 表單標題顯示:Caption(或 Text)直接顯示計數,簡化 UI。

進階改進方向

改進代碼片段
屬性化存取property Count: Integer read GetCount; → Caption := IntToStr(NumBox1.Count);
事件通知加入 OnChange: TNotifyEvent,方法中 if Assigned(OnChange) then OnChange(Self);
泛型計數器TNumBox = class ... FValue: T; ...
介面抽取INumBox = interface ... end; 便於測試替換
線程安全TInterlocked.Increment(FCount) 或 TCriticalSection

常見新手錯誤對照

錯誤代碼問題修正
var Box: TNumBox; Box.AddOne;未實例化直接呼叫Box := TNumBox.Create; try ... finally Box.Free; end;
NumBox1 := TNumBox.Create; ... NumBox1 := nil;僅置 nil 未釋放記憶體NumBox1.Free; 或 FreeAndNil(NumBox1);
在 FormDestroy 前已 Free後續按鈕點擊導致 AV僅在 FormDestroy 統一釋放,或用 FreeAndNil 後檢查 if Assigned(NumBox1)

這個「數字盒子」雖簡單,卻包含了 Delphi 類別設計的核心要素:封裝、實例管理、事件驅動、生命週期。以此為基礎逐步擴展,即可構建複雜的業務物件模型。

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