visibilidad una programacion orientada objetos miembros ejemplos definicion clase caracteristicas delphi generics delphi-xe class-constructors

programacion - Delphi XE: el constructor de clases no se llama en una clase usando genéricos



visibilidad en java definicion (2)

Parece un error de compilación. El mismo código funciona si mueve la declaración e implementación de TTestClass a una unidad separada.

unit TestClass; interface type TTestClass<T> = class private class constructor CreateClass(); public constructor Create(); end; var test: TTestClass<Integer>; implementation class constructor TTestClass<T>.CreateClass(); begin Writeln(''class created''); end; constructor TTestClass<T>.Create(); begin Writeln(''instance created''); end; end.

Considere el siguiente ejemplo (estoy usando Delphi 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.

La construcción de clase nunca se llama y, por lo tanto, la línea ''clase creada'' no se imprime. Sin embargo, si TTestClass<T> la generalización y hago TTestClass<T> en una clase estándar TTestClass , todo funciona como se espera.

¿Me estoy perdiendo algo con los genéricos? O simplemente no funciona?

¡Cualquier idea sobre esto sería aprehendida!

Gracias, -Stefan--


Puedo confirmar que esto es un error. Si la única instanciación de la clase está en el archivo .dpr, entonces el constructor de la clase no se ejecuta. Si crea otra unidad, es decir, un archivo .pas separado, y TTestClass<Integer> una instancia de TTestClass<Integer> desde allí, se ejecutará el constructor de su clase.

He enviado QC # 103798 .