2011-12-23 88 views
8

在Delphi編碼標準中,在函數/過程的參數名稱之前添加前綴的規則是什麼?爲什麼某些參數在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

在我的代碼中,我個人總是添加** A **以將輸入與字段輸出分開,作爲一種習慣,但我想知道這個來源。 – Kromster 2011-12-23 06:27:18

回答

6

這通常會在名稱發生衝突時完成。例如,在TComponent構造函數中,假設它是如下形式:

constructor TComponent.Create(Owner: TComponent) 

現在,Owner參數隱藏實例的Owner屬性。要引用該屬性,您必須編寫Self.Owner。

您可能會在VCL資源中找到A前綴在出現這種衝突時使用,在沒有時使用A前綴。但是這一公約的適用會有不一致之處。

我更希望Embarcadero Pascal style guide能就此事說些什麼,但遺憾的是它仍然保持沉默。

我個人從未在代碼中使用A前綴。根據我的經驗,隱藏總是很好,因爲你通常想要引用的是參數而不是實例成員。如果您需要引用實例成員,則Self.Name可以消除歧義。

所以,沒有規則,只是約定由個人喜好決定。做出自己的選擇並堅持下去。一致性遠比您是否選擇使用這種命名約定更重要。

+1

通常,當我在構造函數中遇到這種情況時,我只是分配給後臺字段而不是屬性。 – 2011-12-23 06:08:33

+1

@梅森這通常會發生。但有時你也希望二傳手也能運行。 – 2011-12-23 06:17:37

+0

塞爾格沒有犯罪,但這個答案深入解釋來源,不僅字面含義。公認。 – Kromster 2011-12-23 06:53:53

17

'A'表示'參數'。另外,'F'是'Field','T'是'Type','E'是'Exception','I'是'Interface'。

沒有規則何時添加'A'前綴,何時不添加。

+0

You miss L from your list – 2011-12-23 06:31:06

+0

@David Heffernan爲什麼L – VibeeshanRC 2011-12-23 06:36:50

+2

@vibeeshan現代VCL代碼使用L作爲局部變量的前綴 – 2011-12-23 06:38:03

相關問題