在Delphi编码标准中,在函数/过程中在参数名之前添加 A 前缀的规则是什么?
例如:
constructor Create(AOwner: TComponent); override;
constructor CreateNew(AOwner: TComponent; Dummy: Integer = 0); virtual;
procedure AddAncestor(Component: TComponent); //No A prefix, why?
function FindClass(const ClassName: string): TPersistentClass; //No A prefix, why?
function GetClass(const AClassName: string): TPersistentClass;
procedure StartClassGroup(AClass: TPersistentClass);
procedure GroupDescendentsWith(AClass, AClassGroup: TPersistentClass);
更多的例子是Delphi公共类(参见类,表格等)。因此我的问题 - 何时添加和何时添加规则是什么?
答案 0 :(得分:18)
'A'代表'论证'。此外,'F'代表'字段','T'代表'类型','E'代表'异常','我'代表'接口'。
没有规则何时添加'A'前缀,何时不添加。
答案 1 :(得分:7)
通常会在名称冲突时完成。例如,在TComponent构造函数中,想象它是否写成:
constructor TComponent.Create(Owner: TComponent)
现在Owner参数隐藏了实例的Owner属性。要引用该属性,您必须编写Self.Owner。
在VCL源代码中,您可能会发现在出现此类冲突时使用A前缀,而在没有冲突时则不使用。但是这个公约的应用会有不一致的地方。
我更希望Embarcadero Pascal style guide会就此事说些什么,但遗憾的是它仍保持沉默。
我个人从不在我编写的代码中使用A前缀。根据我的经验,隐藏总是很好,因为您通常想要引用的是参数而不是实例成员。如果您需要引用实例成员,则Self.Name可以消除歧义。
所以,没有规则,只是由个人偏好决定的惯例。做出自己的选择并坚持下去。与您是否选择使用此类命名约定相比,一致性要重要得多。