Ich glaube nur Phoenix hat so richtig verstanden um was es mir in der Frage ging. Die anderen Antworten gehen mehr in Richtung - was ist Create und was ist der Unterschied wenn ich es so mache oder so.
Mir geht es um die Frage wieso ich kein Create bei meiner Nutzung der Klasse brauche. Das ist das Wichtige an meiner Frage. Ich hab mir vorher schon einiges durchgelesen und weiß wie man es machen sollte. Was ich jetzt nur noch wissen will ist, wieso dies und das trotzdem funktioniert. Wieso funktionieren einige Außnahmen. Das ist mir für das Verständnis wichtig.
Sirius schrieb, daß sich die Frage eigentlich garnicht stellt, denn was kann man mit sowas schon anfangen? Also da gibt es genug Möglichkeiten, z.b. dann, wenn man keine Prozedur, sondern nur ein Objekt zuweisen kann, aber eine Prozedur aufrufen will.
So wie ich Phoenix verstanden habe wird die Klasse nur einmal mit dem Programm zusammen in den Speicher geladen und mit Create wird ein Speicherbreich reserviert in dem die Daten des Objekts der Klasse gespeichert werden. Und da ich in meinem Beispiel nur eine Prozedur aufrufe und keine Daten nutze, kann ich mit der Klasse direkt arbeiten ohne ein Objekt bzw. einen Speicherbreich anzulegen. Stimmt das soweit?
Natürlich gehe ich davon aus, daß mit Variablen nicht die lokalen Variablen der Prozedur gemeint sind, dann das funktioniert auch ohne Create fehlerfrei:
Delphi-Quellcode:
procedure TTestClass.Hallo(Sender: TObject);
var
a, b: Integer;
s: String;
begin
a := Random(10);
b := Random(10);
s := IntToStr(a+b);
ShowMessage('Hallo Welt '+s);
end;
Weitere Test haben gezeigt, daß erst das hier nicht funktioniert:
Delphi-Quellcode:
type
TTestClass2 = class(TObject)
public
FString: String;
procedure Hallo(Sender: TObject);
end;
var
Test2: TTestClass2;
Delphi-Quellcode:
procedure TTestClass2.Hallo(Sender: TObject);
begin
FString := 'Hallo Welt';
ShowMessage(FString);
end;
Das auch nicht
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
begin
Test2.FString := 'Hallo Welt';
Test2.Hallo(Sender);
end;
Kann man also sagen, daß, der korrekte Weg mit Klassen zu arbeiten der ist ein Objekt über Create anzulegen, aber soweit es nur um die Nutzung eine Prozedur ist, das Ganze auch ohne Create und Free geht?