Hãy nói rằng tôi có một lớp với hai phương pháp chung:phương pháp Generic suy luận kiểu
TMyClass = class
procedure DoWith<T: class> (obj: T);
procedure DoFor<T: class> (proc: TProc<T>);
end;
Bây giờ, khi tôi muốn gọi một trong hai phương pháp này với một số loại đặc biệt, Delphi có thể suy ra các loại cho DoWith
phương pháp, vì vậy tôi có thể gọi nó với một trong hai
MyClass.DoWith <TButton> (MyButton)
hoặc
MyClass.DoWith (MyButton)
Trình biên dịch Delphi sẽ biên dịch cả hai. Nhưng nếu tôi bỏ qua các tham số gõ vào phương pháp DoFor
, trình biên dịch Delphi phàn nàn về các tham số kiểu mất tích:
MyClass.DoFor<TButton>(procedure (Button: TButton) begin .... end); // compiles
MyClass.DoFor(procedure (Button: TButton) begin .... end); // doesn't compile
Bây giờ câu hỏi của tôi là: Đây có phải là chỉ là một thiếu sót của trình biên dịch, hoặc là có bất kỳ lý do logic (mà tôi đã không tìm ra được nêu ra) mà cấm trình biên dịch từ một cách chính xác suy ra loại cho phương pháp DoFor
?
Nó trông giống như một hạn chế của trình biên dịch. Suy luận kiểu chung là rất yếu trong Delphi. –