TObject

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ż:
Informacje
Ostatnia modyfikacja 10-09-2008 01:27 Ostatni autor pootek
Ilość wyświetleń 3642 Wersja 12
Komentarz
pootek dnia 10-09-2008 01:31
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.
Potwoor_ dnia 13-07-2008 02:24
niom... teraz niby coś w nim jest ale trochę pomieszane =] to w ogóle chyba powinno być w temacie klasy, czyż nie?
madmike dnia 12-07-2008 13:49
Albo za duży upał, albo ten artykuł dalej nadaje się do napisania od nowa...
programik3 dnia 12-07-2008 10:02
No - jest poprawione po raz szósty :P
Potwoor_ dnia 12-07-2008 00:07
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ć ?
Misiekd dnia 11-07-2008 22:59
"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
madmike dnia 11-07-2008 22:06
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 :>
programik3 dnia 11-07-2008 21:18
Eh... Jest funkcja ClassName - daję nazwę klasy.
Dobra poprawię po raz piąty xD

Dobra poprawiono - definicja jak należy :)
Potwoor_ dnia 11-07-2008 00:55
- 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 =]
brodny dnia 11-07-2008 00:36
"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.
=] dnia 10-07-2008 11:11
pochwali mnie ktoś? ( albo okrzyczy ? )
Misiekd dnia 09-07-2008 19:42
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

Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 0.0301 sek. (zapytań SQL: 9)