2009-01-12 78 views
1

我有一個用Delphi編寫的控制檯應用程序。 我看到我可以通過將它們分配給單元作用域來具有全局變量,但在控制檯應用程序中,我不使用單位(從我已經理解它的形式)。Delphi中的全局變量

+0

好的。你的理解是錯誤的。但是你的問題是什麼? – 2009-01-12 07:16:25

回答

13

不是,一個單位不等於一個表單。

單元是包含部分程序的模塊。每個表單都是一個單獨的單元,但單元不必包含表單。

每個單元都有一個接口部分和一個實現部分。在接口部分的聲明是給使用單位中的所有單元可見:

unit A; 

interface 

    var 
    GVar1 : Integer; 

implementation 

    var 
    GVar2 : Integer; 

end. 

GVar1是可見的,可以通過修改:

unit A; 

interface 

    type 
    TMyClass = class 
    end; 


implementation 

end. 


unit B; 

interface 

uses 
    A; // I can now see and use TMyClass. 

您可以通過在一個單元,宣佈他們聲明全局變量所有使用單元A的單元.GVar2只能由單元A的代碼訪問,因爲它在實現部分中定義。

我強烈建議不要在界面部分使用全局變量,因爲你無法控制它們(因爲任何人都可以改變它們)。如果你真的需要一個全局的,你最好在實現部分定義它,並提供訪問功能。

順便說一句,你可以看到一個單位作爲一種類(單個實例)。它甚至有一個方法來構建和毀滅:

unit A; 

interface 

    type 
    TMyClass = class 
    end; 


implementation 

initialization 
    // Initialize the unit 
finalization 
    // Free resources etc. You can olny have a finalization if you have an initialization. 
end. 
+1

關於你對「單位課堂」的觀察,我想這正是德爾福單位在.Net中的實現方式。 – 2009-01-12 15:32:15

0

如果你想全局變量聲明它在你的單位的接口部分。

PS控制檯應用程序可以使用單位。

PPS花些時間閱讀Delphi文檔,它很好地解釋了Delphi語言。