[C#] kolejność inicjalizowania pól klasy w konsruktorze

0
class Race
    {
        public Race(double pt = 0.0, double ct = 0.0)
        {
            PreviousLapTime = pt;
            CurrentLapTime = ct;
            LapTime = CurrentLapTime - PreviousLapTime;
            ++Laps; // static
            NumberLap = Laps; // uzupelnienie nr okrążenia
        }
        public static int Laps = 0;
        public double PreviousLapTime { get; private set; }
        public double CurrentLapTime { get; private set; }
        public double LapTime { get; private set; }
        public int NumberLap { get; private set; }
    } 

Czy inkrementacja zmiennej statycznej ++Laps zawsze będzie wykonana przed inicjalizacją pola NumberLap ?
Czy może jednak prowokuje to błędy związane nie z zdefiniowaną kolejnością działań?

2

Na logikę - najpierw musi zainicjować pole 'Laps' aby cokolwiek z nim zrobić (nie wykonasz operacji na czymś, co nie istnieje). Dopiero później nastąpi preinkrementacja, którą zdefiniowałeś w konstruktorze, i wtedy 'Laps' będzie miało wartość 1 (tak samo NumberLap będzie miało wartość 1).

0
  public static int Laps = 0; 

To pole jest statyczne i jest zainicjalizowane przy pierwszym obiekcie.
Tylko czy ta inicjalizacja dokonuje się po zakończeniu pracy konstruktora, czy w trakcie, gdy konstruktor do niego się odwołuje?

3

Będzie zainicjalizowana przed użyciem.

10.5.5.1 Static field initialization
The static field variable initializers of a class correspond to a sequence of assignments that are executed in the textual order in which they appear in the class declaration. If a static constructor (§10.12) exists in the class, execution of the static field initializers occurs immediately prior to executing that static constructor.** Otherwise, the static field initializers are executed at an implementation-dependent time prior to the first use of a static field of that class.**

1 użytkowników online, w tym zalogowanych: 0, gości: 1