Lassen Sie uns sagen, dass ich eine Klasse mit zwei generische Methoden haben:Allgemeine Methoden Typinferenz
TMyClass = class
procedure DoWith<T: class> (obj: T);
procedure DoFor<T: class> (proc: TProc<T>);
end;
Nun, wenn ich eine dieser beiden Methoden mit einem bestimmten Typparameter aufrufen möchten, können Delphi den Typ für die folgern DoWith
Methode, so kann ich es mit rufen entweder
MyClass.DoWith <TButton> (MyButton)
oder
MyClass.DoWith (MyButton)
Der Delphi-Compiler kompiliert beide gerne. Aber wenn ich die Typ-Parameter in der DoFor
Methode weglassen, klagen die Delphi-Compiler über die fehlenden Typen Parameter:
MyClass.DoFor<TButton>(procedure (Button: TButton) begin .... end); // compiles
MyClass.DoFor(procedure (Button: TButton) begin .... end); // doesn't compile
Jetzt ist meine Frage: Ist das nur ein Manko des Compilers, oder es ein logischer Grund (das habe ich noch nicht herausgefunden), die es dem Compiler verbietet, den Typ für die DoFor
Methode richtig abzuleiten?
Es sieht aus wie eine Beschränkung des Compilers. Generische Inferenz ist in Delphi sehr schwach. –