namespace Construction;

class Program
{
    // Ten przykład wykonuje konstruktory w celu pokazania ich efektów ubocznych,
    // dlatego w tym przypadku ostrzeżenie CA1806 (informujące o utworzeniu 
    // obiektu, który nigdy potem nie został użyty w kodzie) nie jest przydatne
#pragma warning disable CA1806
    static void Main()
    {
        new Example37.DerivedNoDefaultCtor(42);

        Console.WriteLine();

        new Example38.DerivedCallingBaseCtor();

        Console.WriteLine();

        new DerivedInit();
    }
}

public class BaseInit
{
    protected static int Init(string message)
    {
        Console.WriteLine(message);
        return 1;
    }

    private int b1 = Init("Pole b1 klasy bazowej.");

    public BaseInit()
    {
        Init("Konstruktor klasy bazowej.");
    }

    private int b2 = Init("Pole b2 klasy bazowej.");
}

public class DerivedInit : BaseInit
{
    private int d1 = Init("Pole d1 klasy pochodnej.");

    public DerivedInit()
    {
        Init("Konstruktor klasy pochodnej.");
    }

    private int d2 = Init("Pole d2 klasy pochodnej.");
}
