Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 27-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues no, realmente esto no se puede. ¿Por qué? Porque Delphi es un lenguaje compilado y no interpretado. ¿Qué quiere decir esto? Pues quien sabe pero el caso es que una vez compilado, en el ejecutable ya no quedan referencias a los nombres de funciones, variables, etc. que hayas usado en el código fuente- sólo instrucciones en ensamblador.

Siempre hay alternativas pero dependen mucho del contexto general. Por ejemplo, suponiendo que SelectA, SelectB y SelectC son parte de un X proceso podrías tener algo como

Código Delphi [-]
type
  TProcesoX = class
  public
    function Select; virtual; abstract;
  end;

  TProcesoA = class(TProcesoX)
  public
    function Select; override;
  end;

  TProcesoB = class(TProcesoX)
  public
    function Select; override;
  end;

  TProcesoC = class(TProcesoX)
  public
    function Select; override;
  end;

Según el proceso específico que estés haciendo, instanciarás una u otra clase en una variable de la clase base TProcesoX, de manera que al llamar a Proceso.Select, el polimorfismo se encargará de escoger el correcto.

Pero esto requiere claro, que hayas estructurado tu aplicación en clases.

De no ser así o no ser factible, puedes optar por dos cosas (entre otras que se le ocurran a alguien más).

La primera es: si sólo hay un punto del programa donde debes decidir cuál función llamar, pues olvídate de complicaciones y haz el case:

Código Delphi [-]
case Status of
  0: SelectA();
  1: SelectB();
  2: SelectC();
end;

Si es algo que llamas desde distintas partes de la aplicación, podrías crearte una clase "selectora":

Código Delphi [-]
type
  TSelector = class
  private
    class function SelectA: Integer;
    class function SelectB: Integer;
    class function SelectC: Integer;
  public
    class function Select(Status: Integer): Integer;
  end;

implementation

function TSelector.Select(Estatus: Integer): Integer;
begin
  case Status of
    0: Result := Self.SelectA();
    1: Result := Self.SelectB();
    2: Result := Self.SelectC();
  end;
end;

La clase sólo tiene métodos estáticos (directiva class) de manera que no hay que crear ninguna instancia, simplemente la usas así:

Código Delphi [-]
TSelector.Select(Status);

Los métodos TSelector.SelectA, TSelector.SelectB y TSelector.SelectC también son estáticos y reemplazarían a los que tenías antes.

O bien los dejas fuera de la clase y dejas a TSelector únicamente con el método Select:

Código Delphi [-]
function TSelector.Select(Estatus: Integer): Integer;
begin
  case Status of
    0: Result := SelectA();
    1: Result := SelectB();
    2: Result := SelectC();
  end;
end;

Pero la primera opción te da un cierto orden al englobar en un sólo ente las tres funciones relacionadas.

// Saludos

Última edición por roman fecha: 27-01-2006 a las 19:25:52.
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
Llamada a una funcion que incluye en el nombre una variable papulo PHP 11 28-12-2005 16:38:19
Sobre cierto resultado de la función SHGetSpecialFolderPath dec API de Windows 3 01-06-2005 06:59:01
Error En Variable Double Red_Delphi Varios 3 03-09-2004 00:13:42
problema al llamar una función sgarrido Varios 3 27-07-2004 01:14:33
mostrar SOLO cliente de los que tengo un sólo registro Giniromero SQL 15 11-06-2004 12:33:19


La franja horaria es GMT +2. Ahora son las 02:04:35.


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