我想在参数中传递一个nil值,该参数被声明为object的过程
考虑这段代码
情况1
type TFooProc = procedure(Foo1,Foo2 : Integer) of object; procedure DoSomething(Param1:Integer;Foo:TFooProc);overload; var a,b : Integer; begin a:=b*Param1; //If foo is assigned if @Foo<>nil then Foo(a,b); end; procedure DoSomething(Param1:Integer);overload; begin DoSomething(Param1,nil);//here the delphi compiler raise this message [DCC Error] E2250 There is no overloaded version of 'DoSomething' that can be called with these arguments end;
案例2
Ì发现,如果我将TFooProc声明为过程类型,则编译代码. (但在我的情况下,我需要一个对象类型的过程)
type TFooProc = procedure(Foo1,Foo2 : Integer); procedure DoSomething(Param1:Integer;Foo:TFooProc);overload; var a,b); end; procedure DoSomething(Param1:Integer);overload; begin DoSomething(Param1,nil); end;
案例3
type TFooProc = procedure(Foo1,Foo2 : Integer) of object; procedure DoSomething(Param1:Integer;Foo:TFooProc); var a,b); end; procedure DoSomething2(Param1:Integer); begin DoSomething(Param1,nil); end;
问题是如何将nil值作为参数传递?使用案例1中的代码?
解决方法
对TFooProc进行类型测试:
DoSomething(Param1,TFooProc(nil));