2011-05-04 82 views
0

我來自一個VB/C#背景,我難以理解的以下部分代碼的含義,特別是位「self.fColConsignments.Add」在構造函數中使用時,添加意思是什麼?

TConsignment = class(TCollectionItem) 
constructor Create(Collection : TCollection); override; 

... 

function TIFCSUMMsg.AddConsignment: TConsignment; 
begin 
    result := TConsignment(self.fColConsignments.Add); 
end; 
+2

雖然您在問題標題中提到構造函數,但您的代碼只包含構造函數的*聲明*。對'Add'的調用發生在普通方法的定義中,而不是構造函數。 – 2011-05-04 16:39:44

回答

7

,如果你的背景是C#,不missinterpret該行:

result := TConsignment(self.fColConsignments.Add); 

它只是一個類型轉換,而不是一個構造函數調用。在C#中它會看起來像:

result = (TConsignment)self.fColConsignments.Add; 
+0

這很可能是您這裏混亂的根源。 Delphi中的構造函數是命名方法(最常見的,慣用的名稱是'.Create'),它返回它們正在構建的類的一個實例。類型後跟括號中的表達式是強制轉換,而不是C++/C#風格的構造函數調用。 – 2011-05-04 18:30:16

2

大概fcolConsignments是所擁有的集合TIFCSUMMsg實例(Self)。添加將新項目添加到集合並返回參考作爲結果。然後將結果轉換爲TConsignment以適應AddConsignment方法的結果類型。

2

self.fColConsignments.Add可能會向fColConsignments中添加一個新項目,該項目必須是集合或類似項目並返回它。但是,聲明的返回類型可能比返回的實際對象更通用,然後通過使用TConsignment(object)來應用類型轉換。

1

的代碼在你的榜樣不是構造函數。在C++/C#/ Java /(把你的C後代語言放在這裏),構造函數是無名的方法。所以:

class TFoo { 
TFoo() { // do something } 
} 

.... 
{ 
    TFoo myFoo; 
    myFoo = new TFoo() 
    ..... 
} 

這是一種典型的這種語言的結構。這是不是德爾福是如何工作的。
Delphi中的構造函數有名稱。約定是它們被稱爲.Create
它們可以是靜態的或虛擬的(如任何方法)。

上面的代碼可以被轉換爲:

TFoo = class 
    constructor Create(); 
end; 
... 
constructor TFoo.Create() 
begin 
    // Do something; 
end; 

.... 
// Creating an object 
var 
    myFoo: TFoo; 
begin 
    myFoo := TFoo.Create(); 
    ... 
end; 

你例舉的代碼不是一個構造函數,但一個
一種類型轉換的。 您可以在Delphi語言指南(或Object Pascal語言指南,取決於您可用的Delphi版本上的
)中獲得關於此(類型轉換和構造函數)
的更多信息。

相關問題