namespace InitializationOrder;

public class InitializationTestClass
{
    public InitializationTestClass()
    {
        Console.WriteLine("Konstruktor");
    }

    static InitializationTestClass()
    {
        Console.WriteLine("Konstruktor statyczny");
    }

    public static int s1 = GetValue("Pole statyczne 1");
    public int ns1 = GetValue("Pole 1");
    public static int s2 = GetValue("Pole statyczne 2");
    public int ns2 = GetValue("Pole 2");

    private static int GetValue(string message)
    {
        Console.WriteLine(message);
        return 1;
    }

    public static void Foo()
    {
        Console.WriteLine("Metoda statyczna");
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Początek metody Main");
        InitializationTestClass.Foo();
        Console.WriteLine("Tworzenie obiektu nr 1");
        var i = new InitializationTestClass();
        Console.WriteLine("Tworzenie obiektu nr 2");
        i = new InitializationTestClass();        
    }
}
