AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Wozu CREATE zur Instantiirung eigener Objektklassen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wozu CREATE zur Instantiirung eigener Objektklassen?

Ein Thema von EccoBravo · begonnen am 13. Nov 2006 · letzter Beitrag vom 14. Nov 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Wozu CREATE zur Instantiirung eigener Objektklassen?

  Alt 14. Nov 2006, 08:43
letztendlich handelt es sich bei Create nicht nur um eine Methode sondern den Constructor. Dieses Schlüsselwörtschen anstelle von "function" oder "procedure" gibt an das durch den Aufruf dessen Speicher reserviert wird.

Bei Single etc. musst du keinen Constructor aufrufen weil dort von vornherein klar ist wie groß der Datentyp ist und somit wird auch beim compilieren der Platz schon eingeplant. Bei Objecten ist das anders. Durch Vererbung, damit verbunden das Überschreiben von Methoden etc. steht nicht von vornherein fest wieviel Speicher für eine Objectinstanz benötigt wird (denn du kannst eine Variable vom Typ TObject haben wo sich ein TImage dahinter verbirgt, denn ein TImage ist gleichzeitig auch ein TObject).
Der Vorteil von dem Constructor/Destructor-"Zeug" ist das man eben Methoden überschreiben kann, somit auf bestimmte Ereignisse reagieren kann ohne alles neu zu schreiben etc.
Eine Objektinstanz ist letztendlich nichts anderes als ein Pointer. Mit dem Aufruf des Constructors reservierst du also Speicher worauf dann dein Objectinstanz-Pointer zeigen kann.
Auf den seiten von http://www.delphi-source.de gibt es auch einige Tutorials welche solche Grundlagen vermitteln. Mir haben diese damals sehr geholfen mit Delphi zurecht zu kommen und die Vererbung und das instanzieren von Objecten zu verstehen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#12

Re: Wozu CREATE zur Instantiirung eigener Objektklassen?

  Alt 14. Nov 2006, 09:02
Hallo,
Zitat von EccoBravo:
1. Wenn dem mit dem Reservieren von Speicherplätzen so ist, warum muß nicht jede Single und jeder Integer mit Create genauso instanziert werden?
Warum denn da nicht, single ist ja auch nur ein Typ
und Var myZahl auch nur eine konkrete Kopie davon?
Integer, Byte, Char, Single, konstante Arrays usw. sind sogenannte primitive Typen. Diese benötigen immer genau den gleichen Speicherplatz, im Gegensatz zu dynamischen Arrays oder Objekten. Auch für Strings muss erst Speicher angefordert werden, allerdings übernimmt das der Compiler für Dich.
Auch bei einem Record ist von Anfang an klar, wie groß er ist. Deshalb liegt er immer auf dem Stack und verhält sich somit wie eine primitive Variable.
Such doch mal nach "Heap" und "Stack", das sind die beiden Speicherbereiche, in denen Primitives (Stack) bzw. dynamische Variablen (Objekte, Strings, dyn. Arrays) gespeichert werden.

Zitat von EccoBravo:
2. Try .. end ist ja ganz nett,
aber was, wenn ich mit mehreren Klassen gleichzeitig arbeite?
Dann geht das z. B. so:
Delphi-Quellcode:
Class1 := TClass1.Create;
Class2 := TClass2.Create;
try
  Tu was;
finally
  Class2.Free;
  Class1.Free;
end;
Es kann natürlich auch sein, dass im Konstruktor/Destruktor etwas schiefgeht, darum ist das hier bombensicher:
Delphi-Quellcode:
Class1 := TClass1.Create;
try
  Class2 := TClass2.Create;
  try
    Tu was;
  finally
    Class2.Free;
  end;
finally
  Class1.Free;
end;
Zitat von EccoBravo:
3. Create zum Instanziieren eines Formulares:
Es ist in meinen Programmen nicht immer erforderlich die Form.Create Methode auszufüllen,
diese Methode gibt es dann ja nicht im Code.
Ist dann das Formular nicht richtig als Objekt im Programm definiert?
Oder muß ich immer die Form.Create Methode ausfüllen, damit das Prigramm sauber geschrieben ist?
Schau mal in Deine Projektdatei (*.dpr). Da wird das Form erzeugt:
Application.CreateForm(TForm1, Form1);
Zitat von EccoBravo:
4. Wie verhält es sich mit der Instantiirung von dynamischen Arrays und Variablen, deren Länge erst zur Laufzeit des Programme bekannt wird?
wie:
Delphi-Quellcode:
type
    TmyArray = array of single;
var
    myArray:TmyArray;

implementation
    ...
    setlength(myArray,100);
    ...
Ein dynamisches Array hat erst mal die Länge Null und belegt damit auch keinen Speicher. Sobald Du "SetLength" aufrufst, forderst Du Speicher an. Du solltest am Ende immer "SetLength(MyArray, 0);" hinzufügen, damit der Speicher wieder freigegeben wird. Delphi sollte das zwar automatisch machen, aber so ist es sauberer.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz