【发布时间】:2011-07-06 21:16:25
【问题描述】:
我想在声明为procedure of object的参数中传递一个零值
考虑这段代码
案例一
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 声明为procedure 类型,则代码将被编译。 (但在我的情况下,我需要一个 procedure of object 类型)
type
TFooProc = procedure(Foo1, Foo2 : Integer);
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);
end;
案例 3
我还发现如果删除 overload 指令,代码编译得很好
type
TFooProc = procedure(Foo1, Foo2 : Integer) of object;
procedure DoSomething(Param1:Integer;Foo:TFooProc);
var
a, b : Integer;
begin
a:=b*Param1;
//If foo is assigned
if @Foo<>nil then
Foo(a, b);
end;
procedure DoSomething2(Param1:Integer);
begin
DoSomething(Param1,nil);
end;
问题是How i can pass the nil value as parameter? 使用案例 1 中的代码?
【问题讨论】:
-
你为什么要检查
@foo <> nil?一个简单的Assigned(Foo)避免了否定,而Assigned通常建议用于检查指针和方法引用。
标签: delphi delphi-2007 delphi-xe