Ver Mensaje Individual
  #17  
Antiguo 17-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita