德尔福 - 在课堂上宣布与否?

Dan*_*lly 4 delphi scope

就在最近,可能是因为我一直在维护一些旧的代码,我已经开始研究如何/为什么我做事了.像你一样做.

我的大多数Delphi编程都是内部选择,或者是分散在Web或手册中的示例.有些事情只是因为"这就是我做的"

我目前想知道的是声明,变量,程序,功能等.

当我使用表格时,我会将所有程序和功能置于公开私下.虽然我会尝试避免全局变量和常量,但通常会在接口或实现中使用varconst,具体取决于它们需要调用的位置(有时它们将在公共/私有中)

否则,如果它只是一个单元,我将在接口中声明该过程并在实现中使用.我最近维护的一些代码没有接口声明,但是在程序之后通过调用正确地订购了所有代码...

有没有正确的方法来做到这一点?课程中应该/不应该有什么规则?或者它是一种风格/当你开始的时候?

编辑添加

我的问题不是关于程序的声明是私有/公开的,而是一个程序单位的所有声明是否应该进入其中一个.同样var/const应该是一个还是另一个?

进一步澄清

我知道不在界面中声明,或在public/private/etc中声明会影响我的应用程序中其他单元的过程/功能的可见性.
我的问题的核心是为什么我希望要申报吗? - 特别是在私人放置时,在表单/单元中工作时,更明确的是声明的东西不可用于其他单位......

干杯丹

jpf*_*ius 6

根据具体实例可以具有不同值的所有内容都属于该类,即

TDog = class
strict private
  FColor : TColor;
  FName : String;
public
  property Color : TColor read FColor write FColor;
  property Name : String read FName write FName;
end;
Run Code Online (Sandbox Code Playgroud)

颜色和名称显然是每只狗的属性(每只狗在这里都有其他值).

通用规则:

  • 字段属于private(在此类和此单元中strict private可见)或(仅在此类中可见)
  • 如果需要访问其他类的字段,请创建一个public属性.这使您可以自由地将简单的字段访问更改为更复杂的getter/setter方法,而无需更改类的接口.
  • 一切都应该尽可能地本地化.如果private足够,就没有必要protected(在子类中也可见).并且只public从外面制作你真正需要的东西.
  • 表单:只有那些你想要存储在DFM文件中的东西应该是published.
  • 尽可能多地在实现部分中尽可能多地使用接口部分中的尽可能多的内容.uses条款也是如此.

您可能会混淆全局变量这个术语.如果它在类中声明它不是全局变量(即使声明public).全局变量(你正确认为可以避免使用)总是var在接口或实现部分的一个部分中进行(按照上面的一般规则优先考虑)

  • 在编写和维护库以供第三方开发人员使用时,毫无疑问最好隐藏和不暴露,而不是让其他人通过继承进行访问.设计继承很难,而且暴露的越多,耦合后代就会越多.如有疑问,请将其隐藏起来.这样可以在不破坏客户的情 (3认同)