我需要一种方法来编写一个通用过程来处理对象类型或其任何后代.
我的第一次尝试是宣布
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);
它避免了类型检查错误,但它没有使用安全网.
我的问题是......是否有任何安全的方法来检查无类型var参数的类型?
或者换句话说,你能改进这个Delphi源代码,以便不需要警告吗?
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
delphi ×1