2015-05-08 8 views
5

Dziś jeden bardzo proste pytanie przyszło mi do głowy, kiedy musiałem zastąpić TObject „s BeforeConstruction metody:Dlaczego funkcja TObject.AfterConstruction i BeforeConstruction ma publiczną widoczność?

Dlaczego TObject metody AfterConstruction i BeforeConstruction mieć public widoczność?

Spodziewałem się, że będą to protected. Z jakiego powodu nie są?

Nie mogę sobie wyobrazić ważnego celu, aby zadzwonić pod numer AfterConstruction lub BeforeConstruction bez wywoływania konstruktora lub destruktora tej klasy. Czy ty?

+1

Jestem pewien, że zostało to zadane (a może nie zapytano, ale odebrano) ... – TLama

+0

Prawdopodobnie programista popełnił błąd –

+0

Och, więc ['it's been'] (http://stackoverflow.com/q/ 22540670/960757) o 'TObject.InitInstance' i nie odpowiada bezpośrednio na to, o co prosisz. Ale, jak widać, jest coś, co powinno być chronione, ale nie jest. Odzyskiwanie mojego pierwszego komentarza ... – TLama

Odpowiedz

7

Poprzednie pytanie zadawane, dlaczego niektóre inne metody są publiczne zamiast chronione, a the answer było to, że w pewnym momencie musiały być wywoływane przez funkcje narzędzia, które nie były dołączone do klasy.

TObject.AfterConstruction jest wywoływana przez taką funkcję użytkową, System._AfterConstruction. Jeśli byłaby (ściśle) chroniona, to ta samodzielna funkcja nie miałaby dostępu do tej metody.

Wszystko metody TObject są jawne. * Możemy prawdopodobnie przesłanki, aby wyjaśnić, dlaczego każda metoda jest publiczna, ale w pewnym momencie, podejrzewam, że powodem dla danego sposobu będącego publicznym jest to, że cała inni też.

Po opublikowaniu Delphi przy użyciu tych metod, jakiekolwiek zmniejszenie ich widoczności spowodowałoby ryzyko złamania istniejącego kodu.


* Z wyjątkiem GetDisposed i CheckDisposed, z jakiegoś powodu. Są stosunkowo nowe w porównaniu do większości z TObject.

Powiązane problemy