程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第二章-Delphi面向對象的編程方法(二)(2)

第二章-Delphi面向對象的編程方法(二)(2)

編輯:Delphi

2.1.7 關於作用范圍 

2.1.7.1 標識符的作用范圍 

一個變量、常量、方法、類型或其他標識符的范圍定義了這個標識符的活動區域。對於說明這個標識符的最小程序模塊而言,此標識符是局部的。當您的應用程序在說明一個標識符的程序模塊外執行時,該標識符就不在此范圍內。這意味著此時執行的程序無法訪問這個標識符,只有當程序再度進入說明這個標識符的程序模塊時,才可以訪問它。

下面的示意圖表示一個含有兩個庫單元的工程,每個庫單元中又各有三個過程或事件處理過程。

2.1.7.2 訪問其他程序模塊中的說明 

您可以在當前的程序模塊中訪問其他程序模塊中的說明。例如您在庫單元中編寫一個事件處理過程來計算利率,則其他的庫單元可以訪問這個事件處理過程。要訪問不在當前庫單元中的說明,應在這個說明之前加上其他應用程序的名稱和一個點號(.)。例如,在庫單元Unit1中有事件處理過程CalculateInterest過程,現在您想在庫單元Unit2中調用這一過程,則可以在Unit2的uses子句中加入Unit1,並使用下面的說明: 

Unit1.CalculateInterest(PrincipalInterestRate : Double); 

應用程序的代碼不能在一個模塊外訪問它說明的變量。事實上,當程序執行跳出一個模塊後,這些變量就不存在於內存中了。這一點對於任何標識符都是一樣的,不管事件處理過程、過程、函數還是方法,都具有這一性質。這樣的標識符稱為局部變量。 

2.1.7.3 按照作用范圍說明標識符

您可以在應用程序的不同地方說明一個標識符,而只需保證它們的有效范圍不同即可。編譯器會自動訪問最靠近當前范圍的標識符。

庫單元的全局變量一般可以說明在保留字implementation後面。例如,下面的例程實現將兩個編輯框中的整數相加,顯示在第三個編輯框中。用到了一個整形的全局變量Count: 

…implememntation 

var

Count : Integer; 

procedure TForm1.AddClick(Sender:TObject);

var

FirstNumber,SecondNumber:Integer;

begin

Count := Count + 1;

Counter.Text := IntToStr(Count);

FirstNumber := StrToInt(Edit1.Text);

SecondNumber := StrToInt(Edit2.Text);

Edit3.Text := IntToStr(FirstNumber+SecondNumber);

end;

… 

為了實現每按動一次按鈕Count增加一次,必須對全程變量Count進行初始化處理。在程序庫單元的結尾處,最後一個end.保留字之前,加入保留字initialization和初始化Count的代碼: 

initialization

Count := 0; 

這樣當事件處理過程AddClick被觸發時,Count就會被增加一次,以表征計算次數。如果用面向對象編程,則Count可以說明成窗體的一個域,這在下一節中將有講述。 

2.1.8 編寫一個過程或函數

在您開發Delphi應用程序時,所需的大部分代碼都編寫在事件處理過程中,但有時仍然需要編寫不是事件處理過程的函數或過程。例如,您可以把在多個事件處理過程中用得到語句編寫成過程,然後任何事件處理過程、過程、函數都可以象調用已經存在的過程或函數一樣直接調用它。好處是您只需編寫一次代碼,而且程序代碼會比較清楚。

2.1.8.1 一個自行編寫的函數例程 

在上文兩個數相加的程序中,如果編輯框中無值,則會使得程序出錯中斷。為避免這種情況,編寫下面的函數,檢查編輯框中是否有值,如無值,則提醒用戶輸入: 

function NoValue(AnEditBox:TEdit):Boolean;

begin

if AnEditBox.Text='' then

begin

AnEditBox.Color := clRed;

AnEditBox.Text := '請輸入整數值';

Result := True;

end

else

begin

AnEditBox.Color := clWindow;

Result := False;

end;

end; 

NoValue函數會檢查編輯框是否為空,如果是,編輯框顏色變紅,並提醒用戶輸入一個整數,然後函數返回真值;Result保留字在Delphi中用來專指函數返回值。在上文的例程中加入NoValue函數: 

procedure TForm1.AddClick(Sender: TObject);

var

FirstNumber,SecondNumber : Integer;

begin

if NoValue(Edit1)or NoValue(Edit2) then

exit;

Count := Count + 1;

Counter.Text := IntToStr(Count);

FirstNumber := StrToInt(Edit1.Text);

SecondNumber := StrToInt(Edit2.Text);

Edit3.Text := IntToStr(FirstNumber+SecondNumber);

end; 

如果其中的任何一個返回真值,則表示有編輯框空,會執行exit過程,使得當前的程序模塊停止執行,並使得編輯框出現輸值提示。當新值被輸入後,再執行程序時,紅色提示被隱去,恢復正常的計算狀態。 

2.1.8.2 過程和函數的標題 

每一個過程或函數都以標題開始,其中包括過程或函數的名稱和它使用的參數。過程以保留字procedure開始,函數以保留字function開始。參數位於括號裡面,每一個參數以分號分隔。例如: 

procedure validateDate(Day : Integer; month : Integer; Year : Integer);

您也可以將相同類型的參數組合在一起,則上述過程頭寫作: 

procedure ValidateDate(Day, Month, Year : Integer); 

函數在標題中還多了一項:返回值的類型。下面是一個返回值為Double型的函數標題: 

function CalculateInterest(principal,InterestRate:Double):Double; 

2.1.8.3 函數和過程中的類型說明 

一個過程或函數程序模塊也含有說明部分和語句部分。說明部分可以包括類型說明、變量說明、常量說明等。除了Object Pascal語言中已經定義的類型之外,Delphi的應用程序還可以建立新的數據類型。類型說明部分有保留字type開始。下面是一些類型的說明: 

type

Tcount = Integer;

TPrimaryColor = (Red,Yellow,Blue);

TTestIndex = 1..100;

TTextValue = -99..99;

TTestList = array [TTestIndex] of TTestValue;

TCharVal = Ord('A')..Ord('Z') ;

Today = (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,

Sunday) ; 

在類型標識符後面,用“=”號定義了新的類型。類型界定了變量的取值范圍,例如,TCount類型的變量必須是整形值;一個TPrimaryColor類型的變量只能是red、yellow或blue等等。每一個類型的名稱都是由字母T開始,這並非必須的,但它是Delphi的慣例,在區別類型名和標識符時非常有用。類型說明可以是局部的,也可以是全局的。如果您把它放在implementation後面,則表明對於庫單元來講,它是全局的,所有的事件處理過程和其他的過程、函數都可以調用它。如果類型是在過程中被說明的,則是局部的,離開這一過程,該類型將失效。

一般來講,在過程和函數中,任何類型說明都在變量說明之前,而任何變量說明都在常量之前。但是,只要遵從說明必須在過程與函數的標題之後,而且在程序代碼之前,即是有效的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved