ผู้เขียนจะทำการคัดลอกจากตัวอย่างที่แล้ว เพื่อให้เปรียบเทียบความแตกต่างในการเขียน และลักษณะโดยรวมของ Code
ผู้เขียนได้เขียน Code ต่างๆลงไปในไฟล์ Unit เดียว คือ Unit1.pas ของ Form1
แต่เนื่องจาก Code ทั้งหมดของ Delphi จะถูกแยกเป็น 2 ส่วน คือส่วนของการการประกาศ Type และส่วนที่ Implement Method ซึ่งจะสำคัญในส่วนแรกเท่านั้น ผู้เขียนขอเน้นไปที่ส่วนการประกาศ Type ของ Unit ซึ่งเป็นส่วนของคลาสต่างๆ จะได้ไม่งง
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
//interface ที่ใช้ในการทำงานกับข้อมูล
ImanageData = Interface
function AddNew : Integer;
function Delete : Integer;
procedure Refresh;
procedure find;
end;
//คลาสที่มีหน้าที่เกี่ยวกับโหลดข้อมูล และการบันทึกเป็นไฟล์ โดยสืบทอดมาจาก TInterfacedObject นำไปใช้งานได้เหมือน Abstract class ใน C#
TPhoneBookFile = class(TInterfacedObject)
private
FpbFile: String;
procedure SetpbFile(const Value: String);
public
function SaveToFile : Boolean;
function LoadFromFIle : Boolean;
published
property pbFile : String read FpbFile write SetpbFile;
end;
//คลาสนี้จะเป็นคลาสที่นำเอา Interface มาทำการ Implement ต่อ พร้อมกันนั้นก็สืบทอดความสามารถจากคลาส TPhoneBookFile ด้วย
TPhoneBook = class(TPhoneBookFile ,ImanageData)
public
//ส่วนที่ได้ implement จาก interface ImanageData
function AddNew : Integer;
function Delete : Integer;
procedure Refresh;
procedure find;
procedure ClearBook; virtual; abstract;
end;
//myBase เป็นคลาสที่รวบรวมความสามารถทุกอย่างเอาไว้ แต่จะเห็นว่าเราเลือกที่จะไม่ทำการ Implement method ClearBook ก็ได้
TmyBase = class(TPhoneBook)
end;
//ส่วนของคลาส Form1
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
.........................
หมายเหตุ
ใน Delphi คลาสที่ต้องการนำ Interface ไป Implement จะต้องสืบทอดมากจากคลาส TInterfacedObject ด้วย หากสืบทอดมาจาก TObject จะไม่สามารถ Compile ได้เนื่องจาก TObject เป็นคลาสพื้นฐาน รากสุดของ Delphi ขาดคุณสมบัติที่จะสนับสนุนการใช้ Interface
เมื่อสร้าง Object จาก Class TmyBase แล้วจะสามารถเข้าถึงความสามารถทั้งหมดที่ได้รวบรวมไว้ได้ เสมือนการทำ Multiple Inheritance |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
ImanageData = Interface
function AddNew : Integer;
function Delete : Integer;
procedure Refresh;
procedure find;
end;
TPhoneBookFile = class(TInterfacedObject)
private
FpbFile: String;
procedure SetpbFile(const Value: String);
public
function SaveToFile : Boolean;
function LoadFromFIle : Boolean;
published
property pbFile : String read FpbFile write SetpbFile;
end;
TPhoneBook = class(TPhoneBookFile,ImanageData)
public
function AddNew : Integer;
function Delete : Integer;
procedure Refresh;
procedure find;
procedure ClearBook; virtual; abstract;
end;
TmyBase = class(TPhoneBook)
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TPhoneBookFile }
function TPhoneBookFile.LoadFromFIle: Boolean;
begin
end;
function TPhoneBookFile.SaveToFile: Boolean;
begin
end;
procedure TPhoneBookFile.SetpbFile(const Value: String);
begin
FpbFile := Value;
end;
{ TPhoneBook }
function TPhoneBook.AddNew: Integer;
begin
end;
function TPhoneBook.Delete: Integer;
begin
end;
procedure TPhoneBook.find;
begin
end;
procedure TPhoneBook.Refresh;
begin
end;
procedure TForm1.FormCreate(Sender: TObject);
Var
base: TmyBase;
begin
try
base:=TmyBase.Create;
base.
finally
FreeAndNil(base);
end;
end;
end.
ไม่มีความคิดเห็น:
แสดงความคิดเห็น