• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c# kolejność wykonywania statycznych konstukorów

Object Storage Arubacloud
0 głosów
631 wizyt
pytanie zadane 26 stycznia 2017 w C# przez jankustosz1 Nałogowiec (35,880 p.)
edycja 26 stycznia 2017 przez jankustosz1
Pytanie takie jak w temacie.

Mam kilka klas ze statycznymi konstruktorami i nie wiem która wykona się pierwsza, jeśli wywołają się w odwrotnej kolejności to będzie błąd. Da się jakoś tą kolejność ustawić?

3 odpowiedzi

+1 głos
odpowiedź 26 stycznia 2017 przez Dorion300 Szeryf (90,250 p.)
wybrane 28 stycznia 2017 przez jankustosz1
 
Najlepsza
Niestety ale nie istnieje znany mi sposób na kontrolowanie kolejności wykonanie się konstruktorów statycznych.

Gdy istnieje prawdopodobieństwo wystąpienia takiego błędu, to oznacza po prostu że źle program napisałeś.
Nie widzę twojego kodu więc nie wiem w czym masz dokładniej problem.
Ale mogę ci doradzić przynajmniej że możesz zawsze rozdzielić wykonywanie się konstruktora na prywatne/publiczne statyczne pod-metody które wywołasz w odpowiednim czasie.
komentarz 26 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Wiem tak zrobiłem, ale byłem ciekawy czy jest jakąś zasada w jakiej kolejności jest to wykonywane.
komentarz 27 stycznia 2017 przez Dorion300 Szeryf (90,250 p.)
Przetestowałem i zauważyłem iż statyczny konstruktor klasy wykonuje się tylko po wykonaniu jakiejkolwiek operacji na klasie.

Stworzyłem klasę statyczną z różnymi statycznymi zmiennymi i z statycznym konstruktorem.
W konstruktorze był prosty kod "Console.WriteLine".
Okazało się że aby wykonać konstruktor statyczny, musisz w dowolny sposób wykorzystać tę klasę, w tym przypadku gdy wywołałem pustą metodę statyczną w klasie to już konstruktor statyczny się wykonał.

Podobnie konstruktor jest wywołany gdy zmieniasz jego zmienne.
komentarz 28 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Dzięki nie wiedziałem. Nie ma sensu robić klasy tylko po to żeby wykonała statyczny konstruktor, więc dobrze że wykonuje się to dopiero przed skorzystaniem bo dzięki temu nie trzeba długo czekać aż uruchomi się program jeżeli ładuje się jakieś zasoby w statycznym konstruktorze, bo może się zdarzyć że np. wogóle się z tej klasy nie skorzysta.
+1 głos
odpowiedź 26 stycznia 2017 przez CzikaCarry Szeryf (75,340 p.)
Kod się przecież wykonuje od lewej do prawej, od góry do dołu.
komentarz 26 stycznia 2017 przez JAKUBW Nałogowiec (33,470 p.)
A który plik pierwszy a który drugi?
komentarz 26 stycznia 2017 przez CzikaCarry Szeryf (75,340 p.)
jeśli masz pliki zaincludowane, to w takiej kolejności, w jakiej są zaincludowane
komentarz 26 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
To nie c++ tylko c# a w c# się nie includuje.

A więc który plik pierwszy a który drugi to dobre pytanie.
komentarz 26 stycznia 2017 przez CzikaCarry Szeryf (75,340 p.)
No panie, jak nie? To, że używasz Visuala i robi to on za Ciebie to nie znaczy, że nie includuje się tu plików... "csc.exe /target:library source1.cs source2.cs"
komentarz 26 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
To zmieniam pytanie na takie:

W jakiej kolejności Visual te pliki kompiluje i jak zmienić te parametry?
komentarz 26 stycznia 2017 przez CzikaCarry Szeryf (75,340 p.)
RPM na projekt -> project build order (albo cos takiego, w Visual 2008 tak było)
komentarz 26 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Nie wiem w moim vs (2015) wybiera się tam projekt startowy. Ale w sumie nieważne.

Wydaje mi się na logikę że raczej nie wykonuje tych konstruktów plik po pliku bo powiedzmy plik pierwszy musi skorzystać w swoim statycznym konstruktorze z klasy z pliku drugiego a ta klasa przykładowo korzysta ze swoich statycznych zmiennych inicjowanych statycznie. Chyba nie ma z tą kolejnością żadnej prostej reguły.
0 głosów
odpowiedź 26 stycznia 2017 przez Szymon Polaczy Obywatel (1,660 p.)
Powiedz dokladnie czy robisz przeladowanie konstruktora czy jak
komentarz 26 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)

No nie kilka klas mam i w każdej jest statyczny konstruktor. Tyle że te konstruktory powinny być wykonane w odpowiedniej kolejności, w sumie mogę te konstruktory zamienić na statyczne metody i wywołać je w jakim innym statycznym konstruktorze w nowej klasie ale pytam się czy da się jakoś ustawić zależność lub czy jest jakaś zasada w jakiej kolejności uruchamiają się te statyczne konstruktory.

czy robisz przeladowanie konstruktora?

A czy coś o tym pisałem? Pytanie z kosmosu. 

komentarz 26 stycznia 2017 przez Szymon Polaczy Obywatel (1,660 p.)
Myslalem ze masz kilka konstruktorow w jednej klasie. Konstruktory wykonuja sie przy tworzeniu obiektow wiec jezeli chcesz je poustawiac to musisz poustawiac odpowiednio tworzenie obiektow. Ale jezeli istnieje mozliwosc ze wystapi blad to kod faktycznie moze byc zle napisany
komentarz 26 stycznia 2017 przez jankustosz1 Nałogowiec (35,880 p.)
Ja tu nie mówię o zwykłych konstruktorach tylko statycznych.

Konstruktora statycznego nie da się przeciążyć, więc może być tylko 1. Wykonuje się on automatycznie jeszcze przed wywołaniem metody main w której jest program.

Pytanie dotyczy w jakiej kolejności te konstruktory są wykonywane jeżeli jest ich kilka (Nie tak trudno wywnioskować że jak jest kilka to musi być kilka różnych klas)

Podobne pytania

+1 głos
1 odpowiedź 307 wizyt
pytanie zadane 28 lutego 2020 w C# przez kubekszklany Gaduła (3,190 p.)
+1 głos
1 odpowiedź 185 wizyt
pytanie zadane 7 lutego 2021 w C# przez Macion Nowicjusz (180 p.)
0 głosów
1 odpowiedź 393 wizyt
pytanie zadane 26 kwietnia 2018 w C# przez Stami Gaduła (3,790 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...