Ich habe diesen einfachen Code geschrieben:Delphi geschützte Variablen und Konstruktor
type
TTestA = class
strict protected
a: integer;
public
f: integer;
constructor Create(x: Integer);
end;
type
TTestB = class(TTestA)
strict private
c: integer;
end;
Ich benutze strict
weil diese Klassen in derselben Einheit wie die TForm1
Klasse. Da a
per Definition geschützt ist, sollte es nur in Unterklassen zugänglich sein, aber warum funktioniert dieser Code dann nicht?
procedure TForm1.Button1Click(Sender: TObject);
var
K: TTestB;
begin
k := TTestB.Create(3);
value = k.a; //I cannot access a
end;
Auch die geschützten können nützlich sein, um eine abstrakte Klasse zu erstellen. Wenn ich in C++ einen Konstruktor als protected deklariere, kann ich keine Instanz des Objekts und nur Unterklassen erstellen. Kann Delphi das tun?
Ich habe das gleiche Problem mit der Variablen und dem Konstruktor.
Sie stellen zwei getrennte Fragen. Das ist gegen StackOverflow-Richtlinien. Bitte verschiebe deine abstrakte Frage auf einen anderen Beitrag. –
Zur ersten Frage: Machen Sie nicht den Fehler, Klassen mit Einheiten zu verwechseln. TForm ist nicht mit einer der Klassen TTestA oder TTestB verbunden. Aber TTestB ist eine Unterklasse (Abkömmling) von TTestA, also sind sie verwandt. –