Ver Mensaje Individual
  #3  
Antiguo 12-11-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Para aportar mas al hilo:

Código Delphi [-]
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TAlgunaClase = class
  public
    procedure MetodoNormal;
    procedure MetodoVirtual; virtual;
    procedure MetodoConstante;
    procedure MetodoConstanteVirtual; virtual;
  end;

procedure TAlgunaClase.MetodoConstante;
begin
  Writeln('Metodo Constante: Hola mundo');
end;

procedure TAlgunaClase.MetodoConstanteVirtual;
begin
  Writeln('MetodoConstanteVirtual: Hola mundo virtual');
end;

procedure TAlgunaClase.MetodoNormal;
begin
  Writeln('MetodoNormal: ' + QualifiedClassName);
end;

procedure TAlgunaClase.MetodoVirtual;
begin
  Writeln('MetodoVirtual: ' + QualifiedClassName);
end;

var
  Foo: TAlgunaClase;
begin
  try
    try
      Foo.MetodoNormal; // EAccessViolation
    except
      Writeln('Fallo Foo.MetodoNormal')
    end;

    try
      Foo.MetodoVirtual; // EAccessViolation
    except
      Writeln('Fallo Foo.MetodoVirtual')
    end;

    try
      Foo.MetodoConstante; // este no falla
    except
      Writeln('Fallo Foo.MetodoConstante')
    end;

    try
      Foo.MetodoConstanteVirtual; // EAccessViolation
    except
      Writeln('Fallo Foo.MetodoConstanteVirtual')
    end;
  finally
    Readln;
  end;
end.

Interesante que invocar a un metodo constante sobre una instancia nil o con basura no eleve una excepcion. Con metodo constante me refiero a que no utiliza informacion interna del objeto como en el ejemplo
Responder Con Cita