Zitat:
LOL. Das ist das Beispie aus der Delphi-Hilfe oder?
weiss nich - kann sein, glaube aber nicht. Ich nehms gerne in meinen Trainings
um die Unterschiede von Klassenmethoden und normalen Methdoen deutlich zu machen
Zitat:
Ja, würde ich ja auch gerne mit reinnehmen, nur fehlt mir irgendwie noch immer das Grundlegende und das tiefere Verständnis über Klassenmethoden.
Neben tollen Sachen, die man mit dem Typ TClass bzw eigenen Klassenreferenztypen machen kann
dienen Klassenmethoden vor allem zur Strukturierung und Kapselung.
( Kombiniert mit virtuellen Konstruktoren bildet der Klassenreferenztyp das Rückrat des
ganzen Streamimg Systems der Delphi-Formulare. )
Nimm beispielsweise einen Dateneingabedialog, den Du programmieren willst.
Wenn du prozedural rangehst, baust du dafür vielleicht (bzw hoffentlich)
in der
Unit eine Funktion wie folgt :
Delphi-Quellcode:
type
TForm2 = class(TForm)
Button1: TButton;
private
public
end;
var
Form2: TForm2;
function GetData (out Data : TSomeData): Boolean;
implementation
{$R *.dfm}
function GetData (out Data : TSomeData): Boolean;
begin
with TFrmData.Create(nil) do
try
Result := ShowModal=mrOk;
if Result then
Data := ...
finally
Free;
end;
end;
Genausogut kannst Du aber sagen, was soll die sch.. Funktion, die macht doch ohne den Dialog keinen Sinn
und fasst die Funktion und die Klasse mittels Klassenmethdoe zu einer logischen Einheit zusammen :
Delphi-Quellcode:
type
TForm2 = class(TForm)
Button1: TButton;
private
public
class function TForm2.GetData (out Data : TSomeData): Boolean;
end;
implementation
{$R *.dfm}
class function TForm2.GetData (out Data : TSomeData): Boolean;
begin
with TFrmData.Create(nil) do
try
Result := ShowModal=mrOk;
if Result then
Data := ...
finally
Free;
end;
end;
Von aussen rufts Du die Klassenmethode dann wie folgt auf
if TForm2.GetData(...) then
Hättest Du stattdessen GetDat zu einer normalen Methode degradiert,
müsstest Du den Dialog auch von aussen erzeugen - was weder gut gekapselt noch besonders elegant ist.
Die freistehende Funktion ginge natürlich auch, nur in "reinen"
OOP-Sprachen gibt es sowas halt nicht.
( vieles was in Delphi als Funktionssammlung in Units zusammengefasst ist, findet sich in Java als
Klasse, die ausschliesslich Klassenmethoden enthält und nie instanziiert wird )
Bernd