
Delphi - viditelnosť vlastností
unit Unit1;
interface
type
TClass1 = class
private
FAttrib1: string;
protected
property Property1: string read FAttrib1 write FAttrib1;
end;
TClass2 = class(TClass1)
public
property Property1;
end;
TClass3 = class(TClass2)
protected
property Property1;
end;
implementation
end.
Program Test;
uses Dialogs, Unit1;
var
Class3: TClass3;
begin
Class3 := TClass3.Create;
Class3.Property1 := 'Test';
ShowMessage(Class3.Property1);
end.
Programujem už pomerne dlho ale toto som si všimol až teraz. Ako je možné že po premiestnení vlastnosti "Property1" zdedenej z public časti "TClass2" do chránenej časti triedy "TClass3" môžem nadelej meniť hodnotu atribútu FAttrib1?
Ako mám skryť vlastnosť ktorá je v rodičovskej triede verejná?
V Delpi je o trochu jinak. Pokud by ty tridy nebyly definovany v jedne unite, fungovalo by to tak, jak si to predstavujes. Pokud je deklarace trid v jedne unite, pak jednotlive tridy mohou pristupovat i ke svym private vlastnostem. Je to chyba, ktera se tahne jiz od zacatku VCL.
Je dokonce mozne "snizit" viditelnost tim, ze to presunes z public do protected nebo private. Bude to chodit, jen prekladac bude varovat. Ciste reseni by se delalo pomoci tzv. CustomClass - staci se podivat do zdroju VCL, jak jsou resene kompnenty - napr. TEdit vs TCustomEdit.