Delphi 德尔福新手问题

Delphi 德尔福新手问题,delphi,Delphi,我有几个新手问题,我似乎找不到答案 变量 我注意到,在一些应用程序中,他们在表单类型的私有或公共部分声明变量,而在其他应用程序中,他们在表单的实现部分声明变量,这是有原因的还是仅仅是用户的选择 程序/职能 我再次注意到,在一些应用程序中,过程/函数在表单类型的私有/公共部分声明,然后在创建它们时,以表单名称(例如)作为前缀 Procedure Tform1.testproc; Begin Blah End; 而在其他应用程序中,它们没有在表单类型中声明,也没有以表单名称作为前缀,这有什么

我有几个新手问题,我似乎找不到答案

变量 我注意到,在一些应用程序中,他们在表单类型的私有或公共部分声明变量,而在其他应用程序中,他们在表单的实现部分声明变量,这是有原因的还是仅仅是用户的选择

程序/职能 我再次注意到,在一些应用程序中,过程/函数在表单类型的私有/公共部分声明,然后在创建它们时,以表单名称(例如)作为前缀

Procedure Tform1.testproc;
Begin
   Blah
End;
而在其他应用程序中,它们没有在表单类型中声明,也没有以表单名称作为前缀,这有什么原因吗?还有,哪种方式最好

使用其他单位 为什么有些应用程序会将用户通常创建的其他单位添加到表单实现部分之后的uses子句中,而其他应用程序会将它们添加到表单单位顶部的uses子句中? 以上问题的任何帮助/答案都将非常有用

非常感谢


科林:这一切都取决于能见度

在单元的接口部分声明的类型、变量、常量、过程和函数(但在类和其他类型定义之外)对其他单元可见,而在单元的实现部分声明的类型、变量、常量、过程和函数只能在同一单元中使用因此,如果您需要特定单元中的类型/变量/函数/…但不希望标识符在单元外部有意义,那么最好在需要它们之前在实现部分声明它们

此外,当涉及到类时,它们的标识符可以声明为private、strict private、public、protected和published。这同样是由于不同类型的可见性。私有标识符只能在类本身内部使用(或者在同一单元中定义的其他类,除非strict private),等等

另外,请注意:

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.
由于
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.
您没有两个名为
FormCreate
的函数,但只有一个。此函数的第一个引用是声明,它是
接口
部分中类声明的一部分,其他类和单元将看到它。
FormCreate
函数的实际实现(或其定义)总是在
实现
部分。实际上,其他类或单元不需要知道特定类中函数的确切实现。)


最后,我想推荐官方的Delphi文档,它非常好。从开始。

这一切都取决于可见性

在单元的接口部分声明的类型、变量、常量、过程和函数(但在类和其他类型定义之外)对其他单元可见,而在单元的实现部分声明的类型、变量、常量、过程和函数只能在同一单元中使用因此,如果您需要特定单元中的类型/变量/函数/…但不希望标识符在单元外部有意义,那么最好在需要它们之前在实现部分声明它们

此外,当涉及到类时,它们的标识符可以声明为private、strict private、public、protected和published。这同样是由于不同类型的可见性。私有标识符只能在类本身内部使用(或者在同一单元中定义的其他类,除非strict private),等等

另外,请注意:

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.
由于
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.
您没有两个名为
FormCreate
的函数,但只有一个。此函数的第一个引用是声明,它是
接口
部分中类声明的一部分,其他类和单元将看到它。
FormCreate
函数的实际实现(或其定义)总是在
实现
部分。实际上,其他类或单元不需要知道特定类中函数的确切实现。)

最后,我想推荐官方的Delphi文档,它非常好。从。

变量/过程/函数开始 这一切都归结于信息应该去哪里

如果它是特定于表单实例的方法或变量,则必须在表单类型本身中声明它。如果它适用于表单的所有实例,则将其放在实现部分,使其成为全局的-它不是该类型的一部分

在许多情况下,一次最多只能有一个表单的实例,因此在这种情况下,通常将其放在何处并不重要