delphi – 传递记录参数,而不首先将其声明为变量

前端之家收集整理的这篇文章主要介绍了delphi – 传递记录参数,而不首先将其声明为变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我尝试调用一个具有记录类型(而不是对象)作为参数的过程,是否可以以某种方式传递参数“inline”的详细信息,而不必首先声明该类型的变量?

例如假设我有这个简单的记录类型:

type TMyRecord = record
  AString: string;
  AnInt: Integer;
end;

和这个程序声明:

procedure MyProcedure(Rec: TMyRecord);

如果我想调用MyProcedure,我必须声明一个类型为TMyRecord的变量,或者我可以这样做:

MyProcedure(TMyRecord("Test",10));

这不起作用(XE2)(得到一个编译器错误,它期待一个“)”)。

那么,我可以这样做吗?或不可能。

谢谢

解决方法

可以使用先进的记录结构。

有关高级记录的更多信息,请参阅Delphi帮助中的Records (advanced) section

这是一个小原型,可以看到它在您的情况下如何在函数/过程调用中预先初始化记录:

Type
  TRecord = record
   AString : String;
   AnInt : Integer;
   Constructor Create( Const s : String; i : Integer);
  end;

constructor TRecord.Create(const s: String; i: Integer);
begin
  AString := s;
  AnInt := i;
end;

procedure DoSomething( theRec : TRecord);
begin
  WriteLn(theRec.AString,' ',theRec.AnInt);
end;

begin
  DoSomeThing( TRecord.Create('S',1));
  ReadLn;
end.

看看Delphi RTL,请参阅单元system.types(XE2)中记录类型TPoint和TRect的定义。它们定义了一些重载的Create构造函数,这些构造函数在很多地方使用,可以在函数/过程调用中预先初始化记录结构。

原文链接:https://www.f2er.com/delphi/103251.html

猜你在找的Delphi相关文章