W jednej klasie bazowej jest chroniona procedura . Odziedziczyjąc tę klasę, chcę ukryć tę procedurę przed użyciem z zewnątrz. Próbowałem przesłonić go z poziomu prywatnych, a nawet ściśle prywatnych sekcji, ale nadal można go wywoływać z zewnątrz. Klasa Oryginalna nie jest moja, więc nie mogę zmienić jej definicji.Jak ukryć chronioną procedurę obiektu?
Czy można ukryć tę procedurę w mojej odziedziczonej klasie? I jak?
type
TOriginal = class(TObject)
protected
procedure SomeProc;
end;
TNew = class(TOriginal)
strict private
procedure SomeProc; override;
end;
jeśli chcesz ukryć metodę klasy bazowej z potomek klasy potem trzeba zadeklarować je w sekcja prywatna; prywatne metody są widoczne tylko z własnej klasy; metody chronione są widoczne z klasy hislef i dziedziczonych klas i wreszcie metody publiczne lub opublikowane są widoczne dla wszystkich; opublikowane jest takie samo jak publiczne, ale te sekcje są używane przez Delphi IDE do tworzenia właściwości komponentów widocznych w inspektorze obiektów; – teran
istnieją również dwa terminy "ukrywanie" i "nadpisywanie"; w twoim przykładzie musisz oznaczyć 'SameProc' w klasie bazowej jako' virtual'; a następnie redeclare go w odziedziczonej klasy i oznaczyć go jako "override" oznacza overriding; oznacza to, że jeśli utworzysz 'TNew' i przypiszesz jego instancję zmiennej' TOriginal' ('var orig: = TNew.Create()') i po tym wywołaniu orig.SomeProc zostanie wywołana implementacja TNew.SomeProc; jeśli nie zaznaczysz go jako "przesłonięcie", to orig.SomeProc jest równy 'TOriginal.SomeProc' również jest bezużyteczny, aby obniżyć widoczność metody, ponieważ zawsze możesz go upcast i wywołać – teran
Co to jest zatrzymanie kodu przy użyciu klasy pochodnej od rzutowania odniesienia do odwołania do baz podstawowych lub przypisanie ich? Uzyskując dostęp do jakichkolwiek "ukrytych" metod? Tego, czego chcesz, nie można zrobić. Jeśli odczuwasz chęć, aby to uczynić, to wszystkie relacje dziedziczenia są złe. – mghie