Dúvida sobre POO: Encapsulamento

Delphi

25/04/2011

Boa noite amigos, Estou com uma dúvida sobre POO: A classe TStringGrid possui a propriedade Options, que me permite configurar algumas características do TStringGrid, entre essas características está o  GoColMoving. Eu estava precisando utilizar essa propriedade no TDBGrid, mas o TDGrid não possui, então cheguei a duas soluções: 1ª Implementação - Fiz um casting com a classe TStringGrid no evento Onshow do form:

  TStringGrid(DBGrid1).Options :=
TStringGrid(DBGrid1).Options - [goColMoving];

2ª Implementação - Criei um classe herdando de TCustomGrid:

type

  MyCustomGrid:
class(TCustomGrid);

No evento OnShow do form utilizei o seguinte código:

  MyCustomGrid(DBGrid1).Options
:= MyCustomGrid(DBGrid1).Options - [goColMoving];

A minha dúvida está na segunda implementação, pois, a propriedade Options na classe TCustomGrid está definida como protected, então achei que de acordo com os conceitos de escopo(public, private, protected) da POO eu não deveria “enxerga-la” em outra Classe.   Porque estou podendo manipular(enxergar) a propriedade Options conforme a 2ª implementação?   Obrigado!
Rafael Pimenta

Rafael Pimenta

Curtidas 0

Respostas

Marcos Rocha

Marcos Rocha

25/04/2011

Você deve estar procurando algo do tipo
http://www.delphi3000.com/articles/article_2000.asp?SK=
GOSTEI 0
André Silveira

André Silveira

25/04/2011

Normalmente, você não pode acessar membros protegidos de um objeto. Mas Delphi deixa você acessar membros protegidos se o objeto foi definido na mesma unit. Assim, você pode definir um objeto derivado e fazer a mudança de tipo onde quer usar o membro protegido.
Seria algo assim:

THackControl = class(TCustomEdit) end;

Depois de definir esta classe, você pode acessar todos membros protegidos de TCustomEdit, com objetos de classe derivadas com um código como esse:

THackControl(MyEdit).Color := clBlack;
GOSTEI 0
POSTAR