delphi – 如何在对象类型的过程的in参数中传递nil值

前端之家收集整理的这篇文章主要介绍了delphi – 如何在对象类型的过程的in参数中传递nil值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在参数中传递一个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));
原文链接:https://www.f2er.com/delphi/101996.html

猜你在找的Delphi相关文章