Hi,
mir ist da vorhin was aufgefallen, was ich mir nicht wirklich erklären kann
Ich habe folgende Typen deklariert:
Delphi-Quellcode:
type
THKlasse = class
typ: string;
end;
TUKlasseInt = class(THKlasse)
inhalt: Integer;
end;
TUKlasseStr = class(THKlasse)
inhalt: string;
end;
var
test: THKlasse;
Folgende Prozedur funktioniert fehlerfrei (egal welches der 3 Creates ich verwende):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
test := THKlasse.Create;
// test := TUKlasseInt.Create;
// test := TUKlasseStr.Create;
TUklasseInt(test).inhalt := 12;
Form1.Caption := IntToStr(TUKlasseInt(test).inhalt);
end;
Arbeite ich nun aber mit TUKlasseStr, so funktioniert nur mit beiden folgenden Möglichkeiten:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
test := TUKlasseStr.Create;
// test := TUKlasseInt.Create;
TUklasseStr(test).inhalt := '12';
Form1.Caption := TUKlasseStr(test).inhalt;
end;
Benutze ich test := THKlasse.Create, so gibt's ne
Access Violation bei der Ausgabe von inhalt.
Meine Frage ist jetzt, warum es im 1. Fall immer Funktioniert, im 2. jedoch nur wenn test eine Instanz einer Unterklasse von THKlasse ist.
Außerdem wüde mich interessieren, warum die Unterklassen überhaupt miteinander kompatible sind, obwohl sie unterschiedliche Datentypen enthalten.
mfg Niels