Ver Mensaje Individual
  #5  
Antiguo 23-01-2012
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Reputación: 16
LoPiTaL Va por buen camino
Código Delphi [-]
Si IIntHija hereda de IIntPadre, entonces la clase que implemente IIntHija debe implementar también a IIntPadre

Correcto, entonces el código que he puesto en mi mensaje inicial debería compilar correctamente (lo recopio a continuación):

Código Delphi [-]
  IIntPadre = interface
    ['{14CB7AD1-9CC7-4805-A6FC-9DC8FC218F6A}']
    procedure dummie;
  end;

  IIntHija = interface (IIntPadre)
    ['{7D740013-C5E5-42C6-AFF0-9203A11BDDE9}']
    procedure dummie2;
  end;

  TIntPadre=class (TAggregatedObject, IIntPadre)
  public
    procedure dummie;
  end;

  TIntHija=class (TInterfacedObject, IIntPadre, IIntHija)
  private
    FPadre: TIntPadre;
    function getPadre: IIntPadre;
  public
    //Con esta propiedad pretendo implementar IIntPadre
    property Padre: IIntPadre read getPadre implements IIntPadre;

    //Este método para terminar la implementación de IIntHija
    procedure dummie2;
  end;

y sin embargo, no compila.

Cita:
Por otro lado, al indicar en TIntHija tanto IIntPadre como IIntHija estás duplicando cosas: Con indicar IIntHija ya es suficiente, puesto que esta ya hereda a IIntPadre.
Esto no es correcto, ya que si no defines explícitamente que TIntHija (o alguna de las clases de las que hereda) implementa IIntPadre, a pesar de que implemente IIntHija, cuando haces Support(miHija, IIntPadre, miPadre) te devuelve False (puede ser un bug de delphi, pero se comporta así).

Lo que estoy buscando, es alguna forma sencilla para que el código que he puesto compile.

Un saludo,
LoPiTaL
Responder Con Cita