2011-05-04 75 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版本上的
)中获得关于此(类型转换和构造函数)
的更多信息。

相关问题