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

Delphi 物件變數指派、is/as 運算子與非視覺物件建構完整教學

     編輯:Delphi

物件導向核心技術:變數相容性指派、型別檢查與轉型、非視覺物件生命週期管理

2.2.6 物件變數指派規則

  • 同型別或相容型別可相互指派
  • 祖先型別變數可指派後代實例:TForm1、TForm2 繼承自 TForm → Form2 := Form1 合法
  • 範例:TDataForm 繼承 TForm,AForm: TForm; DataForm: TDataForm → AForm := DataForm 合法(後代指派給祖先變數)

事件處理程序 Sender 參數的多型本質

procedure TForm1.Button1Click(Sender: TObject);
  • TObject 為 VCL 頂層祖先,所有 Delphi 物件皆其後代
  • Sender 實際接收觸發事件的元件實例
  • 使用 is 運算子 檢查實際型別:
    if Sender is TButton then ...

Drag&Drop 範例中的 is/as 實戰

// 檢查拖曳來源是否為 Label
procedure TForm1.Memo1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source is TLabel;  // 僅允許 Label 拖曳
end;

// 拖放時將 Memo 字型設為來源 Label 字型
procedure TForm1.Memo1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  Memo1.Font := (Source as TLabel).Font;  // as 轉型存取 Label 專屬 Font 屬性
end;
  • is:布林檢查,安全判斷型別
  • as:強制轉型,失敗拋出例外,用於確定型別後存取子類別專屬成員

2.2.7 建立非視覺物件

2.2.7.1 宣告非視覺物件類別

type
  TEmployee = class(TObject)
    Name: string[25];
    Title: string[25];
    HourlyPayRate: Double;
    function CalculatePayAmount: Double;
  end;

// 單元介面區宣告
var
  Employee: TEmployee;

2.2.7.2 Create 方法建立實例

  • 類別僅是型別定義,必須呼叫建構函數 Create 配置記憶體產生實例
  • Create 繼承自 TObject,TEmployee 可直接呼叫
  • Employee := TEmployee.Create; → 實例指派給變數
  • 建立後可像一般 Delphi 物件存取欄位/方法

2.2.7.3 釋放物件:Free vs Destroy

  • 用畢釋放記憶體,良好習慣防止洩漏
  • Destroy、Free 兩方法皆繼承自 TObject
  • 推薦 Free:更安全、產生更高效率程式碼
  • Employee.Free;

try...finally 保護模式(標準模式)

Employee := TEmployee.Create;
try
  { 使用 Employee 物件的程式碼 }
finally
  Employee.Free;  // 即使發生例外也保證釋放
end;

掌握物件指派相容性、is/as 型別檢查轉型、非視覺物件 Create/Free 生命週期與 try...finally 保護模式,是編寫健壯 Delphi 程式的核心功力。

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