Delphi 系统[10]关键字和保留字 with

Delphi 系统[10]关键字和保留字  with

1、定义:

with语句是引用记录的字段或对象的字段、属性和方法的缩写/简化。

2、语法:

with obj do statement
with obj1, ..., objn do statement

其中,obj是一个表达式,产生对记录、对象实例、类实例、接口或类类型(元类)实例的引用,语句是任何简单或结构化语句。在语句中,您可以仅使用obj的标识符引用其字段、属性和方法,而不使用限定符。  

3、示例:

//例如:以下申明
type TDate = record
  Day: Integer;
  Month: Integer;
  Year: Integer;
end;
var OrderDate: TDate;

//可以用下面的语句来写:
with OrderDate do
  if Month = 12 then
  begin
    Month := 1;
    Year := Year + 1;
  end
  else
    Month := Month + 1;

//也相当于
if OrderDate.Month = 12 then
begin
  OrderDate.Month := 1;
  OrderDate.Year := OrderDate.Year + 1;
end
else
  OrderDate.Month := OrderDate.Month + 1;

如果obj的解释涉及索引数组或取消引用指针,则在执行语句之前,这些操作只执行一次。这使得语句既高效又简洁。这也意味着在with语句当前执行期间,对语句内变量的赋值不能影响obj的解释。

with语句中的每个变量引用或方法名都将被解释为指定对象或记录的成员(如果可能)。如果要从with语句访问另一个同名变量或方法,则需要在其前面加上限定符,如以下示例所示:

with OrderDate do
  begin
    Year := Unit1.Year
    ...
  end;

当with之后出现多个对象或记录时,整个语句将被视为一系列嵌套with语句。因此 使用obj1、obj2、…、objn do语句相当于:

with obj1 do
	  with obj2 do
	     ...
	     with objn do
	statement

在这种情况下,语句中的每个变量引用或方法名都被解释为objn的一个成员(如果可能);否则,如有可能,将其解释为objn-1的成员;等等同样的规则也适用于解释 objs 本身,因此,例如,如果objn同时是obj1和obj2的成员,则将其解释为obj2.objn。

  

创建时间:2021.08.11  更新时间:

博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
原文地址:https://www.cnblogs.com/guorongtao/p/15128439.html