TObject
programik3
TObject to klasa w Delphi będąca najwyżej w hierarchii dziedziczenia. Jest zatem klasą bazową dla wszystkich innych klas. Dlatego też zdefiniowanie klasy w taki oto sposób:
TMyClass = class(TObject)
procedure MyProcedure(arg: Int64);
end;
jest równoważne z:
TMyClass = class { <- Nie ma zdefiniowanego dziedziczenia!!! }
procedure MyProcedure(arg: Int64);
end;
W klasie TObject zdefiniowany jest podstawowy zestaw metod służących między innymi do:
*tworzenia, destrukcji i inicjalizacji obiektów (np. konstruktor Create
, destruktor Destroy
, Free
)
*introspekcji w czasie działania programu, tzw. RTTI (np. ClassType
, ClassInfo
, ClassName
)
*obsługi wyjątków i komunikatów (np. Dispatch
, SafeCallException
)
Po dokładny opis metod odsyłam do dokumentacji Delphi lub freepascala.
Pewna część tych metod nie wykonuje żadnych operacji, lecz służy za wskazówkę, jaką funkcjonalność mogą implementować klasy dziedziczące z TObject (np. procedura DefaultHandlerStr).
Jakie są korzyści z posiadania takiej klasy - jednego wspólnego korzenia hierarchii dziedziczenia? Pierwsze co przychodzi na myśl to zastosowania rodem z Javy, czyli generyczne kontenery oraz funkcje wykonujące różne operacje w zależności od typu obiektu. Ponieważ każdy obiekt dziedziczy z TObject, można na niego wskazać wskaźnikiem lub referencją do TObject. Zatem do procedury o następującej sygnaturze:
procedure jakas (var argument: TObject);
można przekazać argument dowolnej klasy.
Zobacz też:
Mam nadzieję, iż autor mi wybaczy, ale nie dało się tego czytać. Redundancja była wręcz porażająca. Opis poziomów dostępu czy słów kluczowych można znaleźć w innych artykułach. Postanowiłem przepisać artykuł po swojemu. Specjalistą od Delphi nie jestem, ale mam doświadczenie w innych językach.
Proszę o wybaczenie i poprawienie ewentualnych błędów/niedomówień.
Jeśli ktoś ma wystarczającą determinację, by opisać wszystkie metody i dane w klasie TObject, to byłoby super.
niom... teraz niby coś w nim jest ale trochę pomieszane =] to w ogóle chyba powinno być w temacie klasy, czyż nie?
Albo za duży upał, albo ten artykuł dalej nadaje się do napisania od nowa...
No - jest poprawione po raz szósty :P
uff.... tak ciutkę myślałem że wina braku zrozumienia leży po mojej stronie ale jednak nie =] ktoś to potrafi na ludzki przełożyć ?
"Dyrektywa reintroduce dziedziczy starą wersję procedury lub funkcji i w klasie która odziedziczyła starą wersję procedury lub funkcji jest przykrywana nową wersją ale instukcję w starej wersji procedury lub funkcji nadal są realizowane. Tym zapisem np. można odziedziczoną starą wersję procedury lub funkcji ją zmienić."
czy ty umiesz zdania z sensem składać czy tak piszesz co ci ślina na palce przyniesie?? Generalnie daj sobie spokój z poprawianiem tego, bo coraz gorsze bzdury piszesz
klasą potomną?
może na razie dam sobie jednak spokój z czytaniem :>
Eh... Jest funkcja ClassName - daję nazwę klasy.
Dobra poprawię po raz piąty xD
Dobra poprawiono - definicja jak należy :)
pisał pierwszy autor a nie "pyszczek" =]
a z jakiej byś klasy nie dziedziczył to i tak dostaniesz flaki od TObject =]
a zamiast narzekać to coś popraw =]
"Z klasy TObject można dziedziczyć:
Nie bardzo rozumiem. Co miałeś na myśli pisząc "dziedziczyć nazwę klasy"? Albo w jaki sposób z klasy TObject można dziedziczyć rodzica klasy? Jeśli masz na myśli klasę bazową, to mimo wszystko nadal nie rozumiem, gdyż TObject, jako klasa bazowa dla wszystkich innych klas w Delphi (ta na samym początku w hierarchii dziedziczenia) nie posiada swojej klasy bazowej. "Konstruktor, Destruktor oraz ponad 20 procedur i funkcji" można odziedziczyć również po każdej innej klasie, nie tylko TObject (z dokładnością do stałej).
Generalnie zgadzam się z Misiekd: bardziej do śmieci niż tu. Moim zdaniem wymaga porządnego poprawienia.
pochwali mnie ktoś? ( albo okrzyczy ? )
nie komponent a klasa, nie najwyższy a bazowy, nie virtual a visual, nie są tworzone na podstawie a dziedziczą po,każda klasa ma destruktor i konstruktor, free to nie jest destruktor tylko metoda, no i można pobrać deczko więcej.
Ogólnie bardziej do śmieci niż tu