Cita:
|
Empezado por noob
1) Cuando en la sección de inicialización de tu unidad Singl haces: Instance := TSingleton.CreateInstance; ¿se crea realmente una instacia? Lo digo porque el método constructor CreateInstance no está implementado.
|
De hecho, TObject.Create está también implementado como un método vacío:
Código Delphi
[-]
constructor TObject.Create;
begin
end;
No importa qué constructor uses, el mero hecho de serlo hace que el compilador inserte entre el
begin y la primera instrucción (si la hay) una llamada a la función _ClassCreate que es la encargada de construir la base del objeto (mediante el método NewInstance).
En otras palabras, el efecto de Create y de CreateInstance es exactamente el mismo: ambos tienen implementación vacía, pero por estar etiquetados como constructores generan la llamada a _ClassCreate.
El único objetivo de introducir CreateInstance es el de invalidar el constructor público para que no pueda usarse externamente.
Cita:
|
Empezado por noob
2) ¿Los métodos GetAuthor y SetAuthor del interfaz ISingleton no deberían de ser virtuales y abstractos para luego ser redefinidos en TSingleton?
|
En una interfaz el uso de la directivas
virtual y
abstract sería redundante, porque, de hecho, todos los métodos de una interfaz son virtuales y abstractos por naturaleza. Virtuales porque su implementación dependerá precisamente de la clase que implemente la interfaz y abstractos porque una interfaz no implementa nada por sí sola.
// Saludos