В одном базовом классе есть защищенный метод. При наследовании этого класса я хочу скрыть эту процедуру от использования извне. Я попробовал переопределить его в пределах частных и даже строгих частных секций, но его все еще можно вызвать извне. Класс Original не мой, поэтому я не могу изменить способ определения TOriginal
.Как скрыть защищенную процедуру объекта?
Можно ли скрыть эту процедуру в моем унаследованном классе? И как?
type
TOriginal = class(TObject)
protected
procedure SomeProc;
end;
TNew = class(TOriginal)
strict private
procedure SomeProc; override;
end;
, если вы хотите, чтобы скрыть метод базового класса из потомка класса, то вы должны объявить его в частный раздел; частные методы видны только из класса self; защищенные методы видны из класса itslef и унаследованных классов , и, наконец, общедоступные или опубликованные методы видны для всех; опубликованный аналогичен публичному, но эти разделы используются средой delphi для создания свойств компонентов, видимых в инспекторе объектов; – teran
также есть два термина «сокрытие» и «переопределение»; в вашем примере вы должны пометить 'SameProc' в базовом классе как' virtual'; и затем вы обновляете его в унаследованном классе и отмечаете его как 'override', это означает переопределение; это означает, что если вы создаете «TNew» и присваиваете свой экземпляр переменной «TOriginal» («var orig: = TNew.Create()»), и после этого вызова orig.SomeProc будет вызываться реализация TNew.SomeProc; , если вы не отметите его как 'override', то orig.SomeProc равно' TOriginal.SomeProc' также бесполезно понижать видимость метода, потому что вы всегда можете его повышать и вызывать – teran
. Что останавливает код, используя ваш производный класс от ссылок на ссылки ссылки на базовые классы или их назначение? Получение доступа к любым «скрытым» методам? То, что вы хотите, не может быть сделано. Если вы чувствуете желание сделать это, то отношения наследования ошибочны. – mghie