假设我有一个带有两个通用方法的类:
TMyClass = class
procedure DoWith<T: class> (obj: T);
procedure DoFor<T: class> ( proc: TProc<T> );
end;
现在,当我想要调用这两种方法中的任何一种并指定类型参数时,Delphi可以推断
DoWith
方法的类型,因此我可以使用以下两种方法之一进行调用:MyClass.DoWith <TButton> ( MyButton )
或者
MyClass.DoWith ( MyButton )
Delphi编译器可以愉快地编译两者。 但是如果我在
DoFor
方法中省略类型参数,Delphi编译器会抱怨缺少类型参数。MyClass.DoFor<TButton>(procedure (Button: TButton) begin .... end); // compiles
MyClass.DoFor(procedure (Button: TButton) begin .... end); // doesn't compile
现在我的问题是:这只是编译器的缺陷吗?还是有任何逻辑上的原因(我还没有想到)禁止编译器正确推断
DoFor
方法的类型?