Po napisaniu mojego programu Delphi Prism na tyle, aby skompilować się i uruchomić w systemie Windows i Linux (mono) bez błędów kompilacji, dowiaduję się, że moje konstruktory i zdarzenia ładowania uruchamiają się w innej kolejności niż się spodziewałem. Pomyślałem, że pliki są wykonywane w kolejności, w jakiej są wymienione w pliku projektu, tak jak w pliku .dpr Delphi. Mówiąc o pliku .dpr, czy istnieje podobny plik dla Delphi Prism, którego nie szukam. Zajrzałem do pliku program.pas i właściwości. Nie widziałem tam niczego, co dałoby mi wskazówkę lub wskazówkę.

Jak upewnić się, że pliki projektu są wykonywane we właściwej kolejności w Delphi Prism?

0
ThN 12 sierpień 2011, 00:24

2 odpowiedzi

Najlepsza odpowiedź

.NET nie zna kolejności, w jakiej klasy są wyświetlane w pliku programu. Po prostu widzi zajęcia.

W normalnych okolicznościach możesz pomyśleć o tej zasadzie:

Konstruktory statyczne (klas) są wykonywane bezpośrednio przed pierwszym wywołaniem instancji .ctor lub innej statycznej metody (klas) w tej klasie

Chociaż nie jest to prawdą za każdym razem (można nazwać je wcześniej, ale nie później), jest to dobre przybliżenie, które sprawdza się w większości przypadków.

Tak więc, aby zapewnić określoną kolejność inicjalizacji klasy statycznej, opieram się na następującym: Mam jedną klasę statyczną, która ma metodę Initialize(). Ta metoda jest pierwszą rzeczą, którą wywołuję w metodzie Main() mojego programu. W tej metodzie wywołuję Initialize-Methods na innych klasach w wymaganej kolejności. Daje to pewność, że kod inicjujący zostanie wykonany.

1
Sebastian P.R. Gingter 12 sierpień 2011, 11:33

Delphi Prism kompiluje w kolejności, w jakiej pliki są zdefiniowane w projekcie. Jednak nie powinno być niczego, co zależy od kolejności plików, ponieważ nie ma sekcji inicjujących.

Co do twojego drugiego pytania. Program.pas domyślnie zawiera punkt wejścia, jest to metoda o nazwie "Main", możesz to zobaczyć jako główny początek/koniec.

2
Carlo Kok 12 sierpień 2011, 01:11