En una clase base, existe un procedimiento protegido. Al heredar esa clase, quiero ocultar que ese procedimiento no se use desde el exterior. Traté de sobreescribirlo desde las privadas e incluso secciones privadas estrictas, pero todavía se puede llamar desde el exterior. La clase Original no es mía, así que no puedo cambiar cómo se define TOriginal
.¿Cómo ocultar un procedimiento protegido de un objeto?
¿Es posible ocultar este procedimiento en mi clase heredada? ¿Y cómo?
type
TOriginal = class(TObject)
protected
procedure SomeProc;
end;
TNew = class(TOriginal)
strict private
procedure SomeProc; override;
end;
si desea ocultar método de clase base de la clase descendiente entonces usted tiene que declarar en sección privada; los métodos privados son visibles solo desde la clase propia; Los métodos protegidos son visibles desde la clase itslef y las clases heredadas y, finalmente, los métodos públicos o publicados son visibles para todos; publicado es lo mismo que public, pero esta sección es utilizada por delphi IDE para hacer visibles las propiedades de los componentes en el inspector de objetos; – teran
también hay dos términos "ocultar" y "anular"; en su ejemplo, debe marcar 'SameProc' en la clase base como' virtual'; y luego redeclararlo en clase heredada y marcarlo como 'anular' significa anular; esto significa que si crea 'TNew' y asigna su instancia a la variable' TOriginal' ('var orig: = TNew.Create()') y luego de esa llamada a orig.SomeProc, se llamará a la implementación de TNew.SomeProc; si no lo marca como 'anulación', entonces orig.SomeProc es igual a 'TOriginal.SomeProc' también es inútil bajar la visibilidad del método porque siempre puede subirlo y llamar al – teran
¿Qué es el código de detención utilizando su clase derivada de las referencias de conversión a referencias de la clase base o asignándolos? ¿Obtener acceso a cualquier método "oculto"? Lo que quieres no se puede hacer. Si sientes la necesidad de hacerlo, entonces las relaciones de herencia son todas incorrectas. – mghie