Most popular

วันเสาร์ที่ 4 มิถุนายน พ.ศ. 2554

Delphi VS C# ทำ Multiple Inheritance สร้างคลาสเทพๆ (ตอนที่ 2)(จบ)

จากตอนที่แล้ว (Delphi VS C# ทำ Multiple Inheritance สร้างคลาสเทพๆ (ตอนที่ 1)) ผู้เขียนได้แสดงรูปแบบการใช้ Interface และ Abstract เพื่อนำไปสู่การทำ Multiple Inheritance ใน syntax ทั้ง 2 ภาษา ในตอนที่ 2 นี้ผู้เขียนขอยกตัวอย่างการเขียนเพื่อใช้งาน เป็น Object Pascal Syntax หรือใช้ Delphi
ผู้เขียนจะทำการคัดลอกจากตัวอย่างที่แล้ว เพื่อให้เปรียบเทียบความแตกต่างในการเขียน และลักษณะโดยรวมของ 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
Source Code ทั้งหมดของ unit1.pas


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.

ไม่มีความคิดเห็น:

แสดงความคิดเห็น