Hành vi phổ biến nhất là gọi inherited
. Vì vậy, nếu tôi rõ ràng không muốn hành vi kế thừa, tôi không gọi inherited
. Nếu không, tôi làm. Nếu hành vi kế thừa là một số không có dạng như TObject.Create/Destroy
, tôi vẫn gọi inherited
.
Cũng lưu ý rằng các situtation cho các nhà xây dựng và destructors có lẽ là một chút khác nhau so với các phương pháp khác. Nó đặc biệt hiếm hoi mà bạn sẽ cần phải bỏ qua một cuộc gọi đến phương pháp kế thừa. Tôi không thể nghĩ ra một ví dụ. Các nhà xây dựng luôn tạo ra và phá hủy các đối tượng khác, vậy làm thế nào bạn có thể suy ngẫm về điều đó?
Tôi biết rằng một số tác giả viết mã bỏ qua inherited
khi truy xuất trực tiếp từ TObject
, bởi vì họ biết rằng việc triển khai trong TObject
không làm gì cả. Tôi không thích điều đó và với tôi đó là một sai lầm để làm điều đó. Các chi tiết thực hiện của TObject
không nên bị rò rỉ vào các lớp dẫn xuất.
Tôi chắc chắn rằng TObject.Create/Destroy
sẽ luôn là không có hoạt động. Nếu Embarcadero thay đổi thì nhiều mã sẽ bị phá vỡ. Nhưng những gì về một trong các lớp học của bạn. Giả sử bạn có một lớp bắt nguồn từ TObject
. Và sau đó bạn có một lớp học có nguồn gốc từ rằng:
TMyClass1 = class
....
end;
TMyClass2 = class(TMyClass)
....
end;
Bạn không có constructor cho TMyClass1
và một constructor cho TMyClass2
trông như thế này:
constructor TMyClass2.Create;
begin
// no need to call inherited, it's a no-op
FMyObj := TBlahBlah.Create;
end;
Rồi một ngày bạn sửa đổi các nhà xây dựng TMyClass1
làm một cái gì đó. Bây giờ TClass2
bị hỏng. Vì vậy, tôi sẽ không bao giờ bỏ qua một cuộc gọi đến inherited
vì cuộc gọi đó không làm gì cả.
Tình huống cho các phương pháp thể hiện bình thường hơi khác một chút. Nó là hợp lý hơn mà bạn muốn bỏ qua việc thực hiện lớp cơ sở và cung cấp một triển khai hoàn toàn mới. Nhưng đưa ra quyết định dựa trên những gì lớp dẫn xuất muốn làm thay vì có hay không lớp siêu có triển khai thực hiện trống cho phương thức này.
Nguồn
2013-04-19 11:53:06
+1 cho phần 'chi tiết triển khai'. Thật vậy, một số phiên bản tương lai của RTL có thể quyết định thực sự đặt một số mã quan trọng trong các phương thức trống này. –