strict protected - konstrukcja języka Delphi
Konstrukcja strict private
związane jest z tematyką programowania obiektowego, a konkretnie hermetyzacją. Metody czy pola umieszczone w sekcji strict protected są określone jako ściśle chronione, dostęp do nich z poziomu innej klasy jest niemożliwy, chyba że z poziomu klasy potomnej.
type
TMain = class
strict private
procedure Main;
end;
var
Main: TMain;
begin
Main := TMain.Create;
Main.Main; // <-- tu jest błąd
end
Powyższy przykład pokazuje niemożność uzyskania dostępu do metody Main z klasy TMoja. Kompilator zgłosi błąd: [Error] WinForm2.pas(101): Cannot access protected symbol TMoja.Main. Wszystko dzięki temu, że metoda Main
znalazła się w sekcji strict protected
, do której dostęp spoza klasy jest zabroniony.
Sekcja Protected oraz strict protected różni się tym, iż metody zadeklarowane w tej pierwszej są widoczne na zewnątrz klasy, lecz jedynie w obrębie modułu, w jakim znajduje się klasa. Spójrz na poniższy kod:
program Foo;
{$APPTYPE CONSOLE}
type
TMain = class
strict protected
procedure Main;
end;
TMainChild = class(TMain)
public
procedure Bar;
end;
procedure TMain.Main;
begin
end;
procedure TMainChild.Bar;
begin
Main;
end;
var
Main : TMainChild;
begin
Main := TMainChild.Create;
Main.Bar;
Main.Free;
end.
W tym wypadku metoda Main z klasy TMain
mimo, iż nie jest widoczna na zewnątrz klasy - jest widoczna dla klasy potomnej - TMainChild
.
Zobacz też: