gpt4 book ai didi

德尔福新手问题

转载 作者:行者123 更新时间:2023-12-03 19:22:04 25 4
gpt4 key购买 nike

我有几个新手问题,我似乎无法找到答案。

变量

我注意到,在某些应用程序中,他们在表单类型的私有(private)或公共(public)部分声明变量,但是在其他应用程序中,他们在表单的实现部分声明它们,这是有原因的还是只是用户选择?

程序/功能

我再次注意到,在某些应用程序中,程序/函数在表单类型的私有(private)/公共(public)部分中声明,然后在创建时以表单名称 EG 为前缀

Procedure Tform1.testproc;
Begin
Blah
End;

而在其他应用程序中,它们没有在表单类型中声明,也没有以表单名称为前缀,这是有原因的吗?还有哪个是最好的方法?

使用其他单位

是否有一些应用程序将通常用户创建的其他单元添加到表单实现部分之后的使用子句中,而其他应用程序将它们添加到表单单元顶部的使用子句中?
对上述问题的任何帮助/答案都会很棒

非常感谢

科林

最佳答案

这一切都取决于能见度。

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

此外,当涉及到类时,它们的标识符可以声明为私有(private)、严格私有(private)、公共(public)、 protected 和发布。这又是由于不同种类的能见度。私有(private)标识符只能在类本身(或在同一单元中定义的其他类,除非严格私有(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.

由于 alphaTForm1 类的成员,这个类的每个实例,也就是这个表单的每个对象(也就是这个类创建的每个表单)都会有自己的 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 的函数,但只有一个。这个函数的第一个引用是声明,它是 interface 中类声明的一部分。部分,这是其他类(class)和单位将看到的。 FormCreate的实际实现函数(或其定义)总是在 implementation部分。实际上,其他类或单元不需要知道特定类中函数的确切实现。)

最后,推荐一下Delphi官方文档,非常好。开始于 http://docwiki.embarcadero.com/RADStudio/en/Delphi_Language_Guide_Index .

关于德尔福新手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com