Phương thức lớp
Gọi trực tiếp đến phương thức mà không cần object
Gọi trực tiếp đến phương thức mà không cần object
Thông thường, khi bạn cần thao tác với class, bạn phải thực thể hóa class thành một object và thao tác với object đó. Như đoạn code sau:
var
Obj: TClass;
begin
Obj.DoSomething;
end;
Với class method, thì bạn chỉ cần gọi thông qua tên class
TClass.DoSomething;
Tóm lại, phương thức lớp là phương thức bạn có thể gọi đến trực tiếp bằng class mà không cần sử dụng object.
Bên cạnh khái niệm sẽ học là class method, còn có hai khái niệm class field và class property. Thì cũng giống như class method, các class field và property cơ bản là field và property có thể truy cập thông qua class, không cần object.
Đối với các class field, khai báo sử dụng cụm từ khóa class var. Còn với các property thì sử dụng cụm class property.
type
TClass = class
private
FName: string; // Field thông thường
class var FValue: Integer; // Class field
public
class property Name: string read FName write FName;
end;
Đừng để ý đến phần khai báo property, bây giờ bạn chỉ cần xem để làm quen thôi, chưa cần hiểu.
Vậy tại sao lại sử dụng class field và class property ? Câu trả lời tương tự như class method. Là để truy cập trực tiếp thông qua tên class, không cần object trung gian.
begin
// Đúng
writeln(TClass.FValue); // Class field
writeln(TClass.Name); // Class property
// Sai
writeln(TClass.FName);
// Sai vì FName là field thường, cần truy cập qua object, không phải class
end;
Class method là một method hoạt động độc lập với các phần còn lại của class. Class method không thể truy cập được đến các field, property, method của object (thông thường). Nhưng class method có thể truy cập đến các class field, class property và class method khác (có thể gọi đến constructor).
Lưu ý: Class method không thể được khai báo ảo virtual.
Khai báo và triển khai class method giống như các method khác, nhưng chú ý cần đặt từ khóa class trước procedure hoặc function.
type
TCalculator = class
class function Sum(a, b: Integer): Integer;
end;
class function TCalculator.Sum(a, b: Integer): Integer;
begin
Result := a + b;
end;
begin
writeln('Tong cua 10 va 5 la ', TCalculator.Sum(10, 5)); // 15
end;
Class method sử dụng trực tiếp qua tên class như ví dụ trên, là TCalculator.Sum().
Static method trong delphi khá giống với class method, ngoại trừ với static method bạn không thể sử dụng từ khóa Self bên trong nó. Cá nhân mình thấy static method có vẻ gò bó hơn class method, có lẽ nó ít được sử dụng hơn.
Delphi sử dụng từ khóa static thêm vào cuối khai báo class method (các method thường không được, sẽ báo lỗi) để biến class method thành static method.
Lớp TCalculator trên có thể viết lại bằng static method
type
TCalculator = class
class function Sum(a, b: Integer): Integer; static;
end;
class function TCalculator.Sum(a, b: Integer): Integer;
begin
Result := a + b;
end;
begin
writeln('Tong cua 10 va 5 la ', TCalculator.Sum(10, 5)); // 15
end;
Lưu ý: Từ khóa static chỉ được đặt ở phần khai báo method (ở trên), không được đặt vào phần triển khai.