我需要一种编写通用程序的方法,以便对一个对象类型或其任何子类进行操作。
我的第一次尝试是声明
procedure TotalDestroy(var obj:TMyObject);
但是当与一个子对象一起使用时
type TMyNewerObject = class(TMyObject);
var someNewerObject: TMyNewerObject;
TotalDestroy(someNewerObject);
我得到了臭名昭著的错误“形式参数和实际参数的类型必须相同”。所以在努力寻找解决方案时,我查看了Delphi系统
FreeAndNil
过程的源代码。我发现这个声明非常棒,还有一个惊人的注释。{ FreeAndNil frees the given TObject instance and
sets the variable reference to nil.
Be careful to only pass TObjects to this routine. }
procedure FreeAndNil(var Obj);
它避免了类型检查错误,但没有使用安全网。
我的问题是......有没有安全的方式来检查未命名变量参数的类型?
换句话说,您能否改进此Delphi源代码,以便不需要警告?
procedure FreeAndNil(var Obj);
var
Temp: TObject;
begin
Temp := TObject(Obj);
Pointer(Obj) := nil;
Temp.Free;
end;