1. 程式人生 > 其它 >Delphi 系統[10]關鍵字和保留字 with

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 希望內容對你所有幫助,謝謝!