Provavelmente isso é meio idiota ou até mesmo explicado nos documentos, mas não consegui encontrar.
Há um padrão que parece se repetir entre muitas classes Delphi, que é a criação de a TCustomSomething
antes do TSomething
. Gostaria de saber se há alguma razão especial para isso e, caso eu queira criar uma derivação de, TSomething
devo herdar de TCustomSomething
ou diretamente de TSomething
?
Posso dar alguns exemplos:
- O
TStringStream
herdaTByteStream
daquele herdaTMemoryStream
daquele finalmente herdaTCustomMemoryStream
. TRESTClient
herda diretamente deTCustomRESTClient
.TButton
herda deTCustomButtom
.
De fato, há casos em que vejo um benefício real na TCustom...
classe base, como em TMemo
e TRichEdit
, mas não consigo entender por que TRichEdit
herda de TCustomRichEdit
em vez de diretamente de TCustomMemo
.
TL;DR: Qual é o uso das TCustomFoo
classes em Delphi? Ao estender uma classe existente, devo herdar de TCustomFoo
ou de TFoo
diretamente?
Você pode herdar de qualquer um deles, mas frequentemente descobrirá que a
TFoo
classe não adiciona nenhuma funcionalidade àTCustomFoo
classe, exceto tornar propriedades protegidas públicas ou publicadas, e/ou tornar propriedades públicas em propriedades publicadas.Talvez você queira que seus próprios
TAraujoFoo
componentes não tenham todas essas propriedades públicas/publicadas. Nesse caso, você pode herdar deTCustomFoo
em vez deTFoo
e apenas tornar públicas/publicadas as propriedades que desejaTAraujoFoo
ter.