Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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á?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
V Delpi je o trochu jinak. Pokud by ty tridy nebyly definovany v jedne unite, fungovalo by to tak, j… poslední
Jan Fiala 16.11.2006 06:32
Jan Fiala

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.

Zpět do poradny Odpovědět na původní otázku Nahoru