2009-01-12 79 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语言。