Cita:
Empezado por Neftali
No acabo de entender qué significa ésta frase:
"...Lo prohibitivo es llamar a métodos no de clase desde un método de clase"
|
Me refiero a
llamadas directas a métodos no de clase, es decir sin mediar ninguna instancia de por medio; en el ejemplo que pones es perfectamente legal puesto que creas una variable local F y llamas a algunos de sus métodos, pero en dicho caso puedes llamar a dichos métodos, sean de clase o no, porque los llamas a través de una instancia de la clase (F).
El ámbito (private, protected, public ... etc), tal como dices, no importa en este asunto, es algo colateral.
A todo esto, los constructores son por naturaleza métodos de clase, la misma forma en que creamos objetos así lo indica:
MiObjeto := TMiObjeto.Create; // se comporta como un método de clase
por lo que dentro de un método de clase se puede llamar perfectamente a Create o a cualquier otro constructor.
Lo que sería ilegal es incluir dentro de ese método de clase una llamada
directa a un método no de clase, siguiendo tu ejemplo:
Código Delphi
[-]
class procedure TForm2.Crear;
var
F:TForm2;
begin
F := TForm2.Create(nil);
F.Inicializar; Inicializar; F.Free;
end;
La inclusión de una llamada directa a un método no de clase aquí genera el siguiente error en Delphi:
"This form of method call only allowed for class methods".
Espero haberme explicado ahora mejor,
Saludos