Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #12  
Antiguo 05-02-2009
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola Poyo!

Aunque quizá hay mejores soluciones (habría que ver el fondo de esta necesidad ), se me ocurre, por ejemplo, el uso de propiedades con índice y tener un arreglo global con todos los valores posibles de la constante de clase.

Desarrollé un ejemplo para ilustrarlo:
Código Delphi [-]
implementation

{$R *.dfm}

Uses
  TypInfo;

Const // Cambiar a "Var" para emular variable de clase en vez de constante
  Cadenas :Array [0..2] Of String = ('X de TA', 'X de TB', 'X de TC');

Type
  {$TypeInfo On}  // Para generarle RTTI a la clase TA y sus descendientes
  TA = Class
    Private
      // Método de lectura de la propiedad
      Function GetX (Indice :Integer) :String;
    Published
      { Declaración base de la propiedad que emulará una constante de
        clase virtual.  Añadir especificador "Write SetX" para emular una
        variable de clase virtual en lugar de una constante. }
      Property X :String Index 0 Read GetX;
  End;
  {$TypeInfo Off}

  TB = Class (TA)
    Published
      Property X Index 1;
  End;

  TC = Class (TA)
    Published
      Property X Index 2;
  End;

Function TA.GetX (Indice :Integer) :String;
Begin
  { Para que la solución sea polimórfica, es necesario consultar en la RTTI
    el índice que tiene la propiedad X para el objeto actual, en lugar de
    usar el índice que llega como parámetro (ver la diferencia comentando
    esta sentencia) }
  Indice := GetPropInfo (Self, 'X').Index;

  { Devolvemos la cadena que corresponde del arreglo global }
  Result := Cadenas [Indice];
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
  A, B, C :TA;
begin
  { TEMA: Emular constante de clase "virtual" mediante una propiedad
    publicada con índice y soportando polimorfismo. }

  { Aunque las tres variables están declaradas como de clase TA, les
    asignamos instancias nuevas de clase distinta }
  A := TA.Create;
  B := TB.Create;
  C := TC.Create;

  { Aunque las tres variables estén declaradas con la misma clase, y a
    todas las compilemos como objetos TA, en tiempo de ejecución el
    programa leerá el valor correcto de la propiedad X para cada objeto,
    según la clase real a la cual pertenecen (polimorfismo) }
  ShowMessage (A.X);
  ShowMessage (B.X);
  ShowMessage (C.X);

  // Liberamos los objetos (usar Try..Finally en un caso real)
  A.Free;
  B.Free;
  C.Free;
end;

Anexo el código en un archivo .zip.

Saludos.

Al González.
Archivos Adjuntos
Tipo de Archivo: zip EmularConstanteClase.zip (4,3 KB, 6 visitas)
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ayuda con variables estáticas !!!!!! david_uh Varios 4 25-07-2007 00:49:14
Classes -Galadriel- Varios 3 06-06-2007 02:06:43
Ayudaaa Pilas estaticas alekandro OOP 6 26-04-2006 14:04:11
Classes o no classes? tramjauer OOP 3 19-08-2005 21:36:17
Direcciones estáticas o dinámicas Aprendiendo Firebird e Interbase 1 02-04-2004 01:07:08


La franja horaria es GMT +2. Ahora son las 06:01:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi