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; except
Writeln('Fallo Foo.MetodoNormal')
end;
try
Foo.MetodoVirtual; except
Writeln('Fallo Foo.MetodoVirtual')
end;
try
Foo.MetodoConstante; except
Writeln('Fallo Foo.MetodoConstante')
end;
try
Foo.MetodoConstanteVirtual; 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