Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 02-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Por ejemplo esto:

Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  IAdderSubstractor = interface
    function Sumar(const A, B: Integer): Integer;
    function Restar(const A, B: Integer): Integer;
  end;

  IHelloWorld = interface
    procedure SayHelloWorld;
  end;

  TCalculadora = class(TInterfacedObject, IAdderSubstractor, IHelloWorld)
  public
    function Sumar(const A, B: Integer): Integer;
    function Restar(const A, B: Integer): Integer;

    procedure SayHelloWorld;
  end;

  TOtraClase = class
  public
    procedure Say(const AText: string);
  end;

function TCalculadora.Restar(const A, B: Integer): Integer;
begin
  Result := A - B;
end;

procedure TCalculadora.SayHelloWorld;
begin
  Writeln('Hello world');
end;

procedure TOtraClase.Say(const AText: string);
begin
  Writeln(ClassName + ' ' + AText);
end;

function TCalculadora.Sumar(const A, B: Integer): Integer;
begin
  Result := A + B;
end;

var
  OtraClase: TOtraClase;
  Calculadora: TCalculadora;
  AdderSubstractor: IAdderSubstractor;

begin
  AdderSubstractor := TCalculadora.Create;
  if AdderSubstractor is TCalculadora then
    Calculadora := TCalculadora(AdderSubstractor);

  OtraClase := TOtraClase(AdderSubstractor);

  try
    try
      Writeln(IntToStr(AdderSubstractor.Sumar(10, 5)));
      Writeln(IntToStr(Calculadora.Restar(10, 5)));
      OtraClase.Say('Hola!');
    except
      on E: Exception do
        Writeln(E.ClassName, ': ', E.Message);
    end;
  finally
    Readln;
  end;
end.

Una clase puede implementar varias interfaces; luego, mediante el operador is me aseguro de que puedo realizar un cast sin problemas

El problema del codigo anterior es que la linea OtraClase := TOtraClase(AdderSubstractor);, no solo que compila perfecto, sino que no da error en runtime; hasta que se intenta usar la clase. Evidentemente se produce un access violation al invocar al metodo Say

Luego, otra variante es el uso del as

Código Delphi [-]
OtraClase := AdderSubstractor as TOtraClase;

Eso tambien compila perfectamente pero eleva una excepcion EInvalidCast
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
Ocultar componentes en tiempo de diseño ElDioni OOP 3 29-11-2011 17:41:47
Componentes en tiempo de diseño ElDuc OOP 12 10-02-2011 06:02:15
eventos en tiempo de diseño jar OOP 0 27-01-2007 22:09:11
Indices En Tiempo De Diseño?? amadis Conexión con bases de datos 0 12-04-2006 20:22:01
Diseño en tiempo de ejecucion Nelson Alberto Impresión 2 26-01-2006 09:34:12


La franja horaria es GMT +2. Ahora son las 13:03:22.


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