Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Wie SaveToStream für Metafiles in eigener Klasse realisi

  Alt 3. Jan 2007, 11:53
Zitat von kalmi01:
Der übergebene Stream ist so initialisiert:WMFStream := TStream.Create; worden.
Hi,
du bekommst einen Abstrakten Fehler, da du hier mit einer abstrakten Klasse arbeitest. Abstrakt ist eine Klasse immer dann, wenn mind. eine ihrer Funktionen abstrakt ist (virtual; abstract; markiert).
Solche abstrakten Methoden werden nur als Signatur in der Klasse angegeben, nicht jedoch implementiert. Die Frage nach dem Sinn davon lässt sich auch leicht an diesem Beispiel erklären, du verwendest abstrakte Klassen einfach als Basisklassen. Hier in diesem Fall ist TStream die Basis für ganz unterschiedliche Klassen, z.B. TMemoryStream und TFileStream. Während ein TMemoryStream zum schreiben Arbeitsspeicher reservieren wird und die Daten dort ablegt, wird ein TFileStream die Daten natürlich in eine Datei schreiben. Intern werden also je nach Art des Stream völlig unterschiedliche Prozesse statt finden, trotzdem bieten sie nach außen die gleichen Methoden (z.B. write) an.
Speicherst du also Daten in (deines Metafiles) in einem Stream, dann kann es dir völlig egal sein, ob der Stream die Daten in eine Datei, den Hauptspeicher oder über ein Netzwerk an einen anderen Rechner schreibt. Für dich ist nur wichtig zu wissen, dass es eine Funktion write gibt und wie du die Daten an diese Methode übergibst.

Nochmal zusammengefasst, Abstrakte Klasse enthält nur deklaration einer Methode, ohne ihre Implementierung und garantiert so, dass alle Nachfahren diese Methode besitzen müssen. Nachfahren überschreiben die Methode und können überall dort verwendet werden, wo eine Instanz von ihrer Klasse oder dem abstrakten Vorfahren benötigt wird.

Gruß Der Unwissende
  Mit Zitat antworten Zitat