Phương thức (method) là các hàm, thủ tục nằm trong class. Những phương thức này được triển khai bên ngoài class.
Method gồm 2 phần: phần khai báo trong class (declare) và phần triển khai bên ngoài class (implement)
type
THinhVuong = class
Canh: Byte;
function DienTich: Word;
end;
function THinhVuong.DienTich: Word;
begin
Result := Canh * Canh;
end;
Như trên, chúng ta khai báo một lớp hình vuông với phương thức DienTich. Bạn có thể dễ dàng hiểu được triển khai phương thức không khác gì một chương trình con, một hàm nhưng tên hàm bao gồm tên class, dấu chấm (.) và tên phương thức.
Đơn giản phải không ?
Mỗi class đều có hai phương thức đặc biệt, constructor và destructor. Constructor là phương thức dùng để tạo đối tượng, desctructor dùng để phá hủy, giải phóng bộ nhớ.
Mặc định, constructor là phương thức có tên Create mà ta thường hay sử dụng để tạo object từ class. Còn destructor là phương thức Destroy.
Một trong các ý nghĩa của constructor là giúp chúng ta khởi tạo class một cách nhanh chóng. Thay vì tạo class và gán các giá trị cho các trường, ta có thể sử dụng Create để vừa tạo vừa gán luôn cho tiện
Thay vì viết
type
THocSinh = class
Name: string;
Class: string;
Age: Byte;
end;
begin
var HS1 := THocSinh.Create;
HS1.Name := 'Tong Hoang Vu';
HS1.Class := '11A03';
HS1.Age := 16;
end;
Thì sử dụng constructor sẽ tiện hơn nhiều
type
THocSinh = class
Name: string;
Class: string;
Age: Byte;
constructor Create(aName, aClass: string; aAge: Byte);
end;
constructor Create(aName, aClass: string; aAge: Byte);
begin
Name := aName;
Class := aClass;
Age := aAge;
end;
begin
var HS1 := THocSinh.Create('Tong Hoang Vu', '11A03', 16);
end;
Trong các ngôn ngữ khác, phương thức lớp (class method) gọi là phương thức tĩnh (static method). Đây là phương thức đặc biệt, có thể gọi trực tiếp bằng class mà không cần khởi tạo object.
Ví dụ đơn giản nhất là class TFile trong unit System.IOUtils. Ta có thể gọi nhanh như sau
TFile.Rename('1.doc', '2.doc');
Mà không cần phải tạo thêm object như sau cho tốn thời gian
var aFile := TFile.Create;
aFile.Rename('1.doc', '2.doc');
TFile.Rename là phương thức class, nó có thể sử dụng để viết mã nhanh hơn. Triển khai của lớp TFile cơ bản như sau
type
TFile = class
public
class procedure Rename(FileName1, FileName2: string);
end;
class procedure TFile.Rename(FileName1, FileName2: string);
begin
// Do some thing
end;
Như các bạn thấy, phương thức lớp cần có từ khóa class phía trước. Cả trong phần định nghĩa và triển khai.