我有几个新手问题,我似乎找不到答案。
我注意到在某些应用程序中,他们在表单类型的私有或公共部分声明变量,但在其他应用程序中,他们在表单的实现部分声明变量,这是有原因的还是只是用户选择?
我再次注意到,在某些应用程序中,程序/函数在表单类型的私有/公共部分中声明,然后在创建时以表单名称 EG 为前缀
Procedure Tform1.testproc;
Begin
Blah
End;
Run Code Online (Sandbox Code Playgroud)
而在其他应用程序中,它们没有在表单类型中声明,也没有以表单名称为前缀,这是有原因的吗?还有最好的方法是什么?
为什么某些应用程序将通常用户创建的其他单元添加到表单实现部分之后的使用子句中,而其他应用程序将它们添加到使用子句@表单单元的顶部?对上述问题的任何帮助/答案都会很棒
非常感谢
科林
这一切都取决于可见性。
在单元的接口部分(但在类和其他类型定义之外)中声明的类型、变量、常量、过程和函数对其他单元可见,而在实现部分中声明的类型、变量、常量、过程和函数一个单位的只能用在同一个单位中(并且只能在声明下面)。因此,如果您需要特定单元中的类型/变量/函数/...但不希望标识符在单元外有意义,那么最好在需要它们之前在实现部分声明它们.
此外,当涉及到classes 时,它们的标识符可以声明为 private、strict private、public、protected 和published。这又是由于不同种类的可见性。私有标识符只能在类本身内部使用(或在同一单元中定义的其他类,除非严格私有),依此类推。
另外,请注意这一点:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
alpha: integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
var
beta: integer;
implementation
{$R *.dfm}
end.
Run Code Online (Sandbox Code Playgroud)
由于alpha是类 的成员,所以这个类的TForm1每个实例,即这个表单的每个对象(也就是这个类创建的每个表单)都会有自己的 alpha变量。另一方面,beta在任何类之外的单元中声明的 是“每个单元一个”,即每个TForm1对象都会看到相同的beta。(然后还有“类变量”等。请参阅文档以获取更多详细信息。)
(另外,你可能已经知道这一点,但在这样的情况下
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm3 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
begin
beep;
end;
end.
Run Code Online (Sandbox Code Playgroud)
您没有两个名为 的函数FormCreate,而只有一个。这个函数的第一个引用是声明,它是本interface节中类声明的一部分,其他类和单元将看到它。实际执行中的FormCreate函数(或它的定义)总是在implementation部分。事实上,其他类或单元不需要知道特定类中函数的确切实现。)
最后推荐Delphi官方文档,非常好。从http://docwiki.embarcadero.com/RADStudio/en/Delphi_Language_Guide_Index开始。
| 归档时间: |
|
| 查看次数: |
558 次 |
| 最近记录: |