Ver Mensaje Individual
  #4  
Antiguo 18-12-2013
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Reputación: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Porque SELF no es una variable, sino una constante. Siempre es la referencia (puntero) al objeto del método que se está ejecutando en ese momento.

Cuando defines un método de una clase, como por ejemplo:
Código Delphi [-]
  TMiClase = CLASS
  PUBLIC
    PROCEDURE Metodo (aVariable: STRING);
  END;

en realidad el compilador lo interpreta como si fuera así:
Código Delphi [-]
  TMiClase = CLASS
  PUBLIC
    PROCEDURE Metodo (CONST Self: TMiOBjeto; aVariable: STRING);
  END;

Y cuando llamas al método:
Código Delphi [-]
  MiObjeto.Metodo ('Hola');

El compilador lo interpreta como si fuera así:
Código Delphi [-]
  TMiClase.Metodo (MiObjeto, 'Hola');

El caso de RESULT es diferente, ya que sí es una variable cuya posición de memoria se corresponde con la posición de pila donde el llamante tomará el valor devuelto por la función. En cierto modo, una definición como:
Código Delphi [-]
  FUNCTION UnaFuncion (aValor: INTEGER): INTEGER;
Se interpreta como si fuera:
Código Delphi [-]
  PROCEDURE UnaFuncion ( OUT RESULT: INTEGER; aValor: INTEGER);
y si fuera método de una clase...
Código Delphi [-]
  PROCEDURE UnaFuncion (CONST SELF: TMiClase; OUT RESULT: INTEGER; aValor: INTEGER);
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 18-12-2013 a las 14:20:18.
Responder Con Cita