Theo tài liệu chính thức, vấn đề (cần giải quyết) là các phương thức nặc danh là các loại được quản lý, trong khi các biến thủ tục thì không.
Từ khóa 'tham chiếu đến' tổng quát hơn các loại thủ tục khác.
Đây là cách doc đặt nó: phương pháp http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/anonymousmethods_xml.html
Anonymous thường được gán cho một cái gì đó, như trong ví dụ sau:
myFunc := function(x: Integer): string
begin
Result := IntToStr(x);
end;
myProc := procedure(x: Integer)
begin
Writeln(x);
end;
phương pháp Anonymous cũng có thể được trả lại bởi chức năng hoặc được chuyển thành giá trị cho các tham số khi gọi phương thức. Ví dụ, bằng cách sử dụng phương pháp biến MyFunc nặc danh được xác định ngay trên:
type
TFuncOfIntToString = reference to function(x: Integer): string;
procedure AnalyzeFunction(proc: TFuncOfIntToString);
begin
{ some code }
end;
// Call procedure with anonymous method as parameter
// Using variable:
AnalyzeFunction(myFunc);
// Use anonymous method directly:
AnalyzeFunction(function(x: Integer): string
begin
Result := IntToStr(x);
end;)
Phương pháp tài liệu tham khảo cũng có thể được giao cho các phương pháp cũng như phương pháp vô danh. Ví dụ:
type
TMethRef = reference to procedure(x: Integer);
TMyClass = class
procedure Method(x: Integer);
end;
var
m: TMethRef;
i: TMyClass;
begin
// ...
m := i.Method; //assigning to method reference
end;
Tuy nhiên, ngược lại là không đúng: bạn không thể gán một phương pháp vô danh với một con trỏ phương pháp thông thường. Tham chiếu phương thức là các kiểu được quản lý, nhưng các con trỏ phương thức là các kiểu không được quản lý. Vì vậy, vì lý do an toàn kiểu, việc gán tham chiếu phương thức cho con trỏ phương thức không được hỗ trợ. Ví dụ, các sự kiện là các thuộc tính có giá trị con trỏ của phương thức, vì vậy bạn không thể sử dụng một phương thức nặc danh cho một sự kiện. Xem phần liên kết biến để biết thêm thông tin về hạn chế này.
Bạn đang thiếu một trong những tính năng chính quan trọng nhất của các phương pháp ẩn danh có tính năng chụp biến. Những thứ khác như di chuyển xung quanh hoặc trả lại chúng có thể được thực hiện với các con trỏ hàm thường xuyên nhưng không thể thay đổi. –
Cảm ơn @StefanGlienke vì đã chỉ ra điều đó. Tôi đã quên tất cả về điều đó. Tất nhiên tất cả những điều này xảy ra trên đống quy tắc ra công cụ này cho mã tốc độ cao. – Johan