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ż:

12 komentarzy

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ą?

właściwości są tylko i wyłącznie jest widoczna

efekt w modułach jest inna

Konstruktor i destruktor aby mógł poprawnie chodzić trzeba trzeba

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 :)

  • Nazwę klasy
  • Rodzica klasy

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ć:

  • Nazwę klasy
  • Rodzica klasy
  • Konstruktor, Destruktor oraz ponad 20 procedur i funkcji"

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