考慮下面的例子(我使用德爾福XE)類:德爾福XE:類構造函數不會被調用,使用泛型
program Test;
{$APPTYPE CONSOLE}
type
TTestClass<T> = class
private
class constructor CreateClass();
public
constructor Create();
end;
class constructor TTestClass<T>.CreateClass();
begin
// class constructor is not called. this line never gets executed!
Writeln('class created');
end;
constructor TTestClass<T>.Create();
begin
// this line, of course, is printed
Writeln('instance created');
end;
var
test: TTestClass<Integer>;
begin
test := TTestClass<Integer>.Create();
test.Free();
end.
類constructur不會被調用,因此該行「類創建'不打印。 但是,如果我刪除概括並將TTestClass<T>
轉換爲標準類TTestClass
,則所有內容都按預期工作。
我是否錯過了仿製藥?或者它根本不起作用?
對此的任何想法都會被理解!
感謝, --Stefan--
[documentation](http://docwiki.embarcadero.com/RADStudio/en/Methods#Class_Constructors)指出:「注意:泛型類或記錄的類構造函數可能執行多次,確切的次數在這種情況下執行的類構造函數取決於泛型類型的專用版本的數量,例如,專用TList類的類構造函數可能會在同一個應用程序中執行多次。但它看起來有點像一個bug。 –
2012-02-29 15:14:04
是的。我也讀過。除非「多次」包括零次,否則這確實看起來像一個錯誤。 – Schafsmann 2012-02-29 15:16:26
一般規則:不要嘗試製作一個自包含的.dpr應用程序。總是至少有一個單位,並保持所有的DPR文件,你可以避開它。 – 2012-02-29 17:12:12