Usando parte del codice di un precedente post, ho provato ulteriori "questioni" a riguardo delle istanze degli oggetti ... e venendomi un terribile dubbio ho osato qualcosa che non mi sarei mai sognato di fare ... questo è il codice, che viene eseguito senza alcun problema (ossia compare lo showmessage) senza generare mai errore ........ ecco in questi momenti mi viene, nonostante la veneranda età, ancora da piangere e la vita mi scorre davanti agli occhi ..... con un teschio come immagine finale .....
Nuovo preogetto, mettete sempre un pulsante con l'evento OnCLick e poi sovrascrivete tutto con il codice seguente ...
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Windows, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
TDoSomething = class
Danger: string;
constructor create;
procedure FaiQualcosa;
end;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
DoSomething: TDoSomething;
implementation
{$R *.lfm}
constructor TDoSomething.create;
begin
//DI QUI NON CI PASSO MAI .... E SE CI PASSASSI PER SBAGLIO CHIUDO IL PROGRAMMA !!!
ExitProcess(0);
Danger := 'Danger!';
end;
procedure TDoSomething.FaiQualcosa;
begin
ShowMessage('Faccio qualcosa');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoSomething.FaiQualcosa;
end;
end.
Posto anche le due immagini dell'esecuzione .... qualcuno mi dica (a parte che ripeto non farei mai una cosa simile coscentemente) che ho le travegole ...
Avete notato cosa manca ? No ..... non c'è la creazione dell'istanza (di DoSomething), ma il codice viene eseguito lo stesso .... :-[ :-X :-\
......
in effetti è un comportamento abbastanza assurdo
ho fatto una prova modificando questo codice
ShowMessage('Faccio qualcosa ' + Danger);
ed in effetti così c'è un errore a runtime
mi viene da pensare che in questi casi il metodo chiamato si comporti come fosse un class method
ma chiaramente nessuno glielo ha chiesto... :D