Klasy-kolejność operacji

0

Witam

Poniżej jest kod realizujący wzorzec projektowy Singleton. Sam wzorzec rozumiem, natomiast mam pytanie odnośnie kolejności operacji w klasie.

using System;

class MainApp
{
    static void Main()
    {

        Singleton s1 = Singleton.Instance();

        Singleton s2 = Singleton.Instance();

        if (s1 == s2)
        {

            Console.WriteLine("Objects are the same instance");
        }
    }

}

class Singleton
{

    private static Singleton instance;

    protected Singleton()
    {

    }

    public static Singleton Instance()
    {
        if (instance == null)
        {
            instance = new Singleton();
        }
        return instance;
    }
}

Powyżej mamy dwie klasy. Czy inicjalizacja zmiennych w klasach odbywa się "od góry do dołu" kodu (obejmując dwie klasy), a następnie wykonywana jest metoda Main()? Druga możliwość, to wykonanie od razu metody, a przy odwołaniu z niej do innej klasy, zainicjowanie zmiennych tej klasy. Tryb debugowanie niewiele mi pomógł. Z góry dzięki za pomoc.

Pozdrawiam

0

Pierwsza wykonywana jest metoda Main, pozniej wszystko idzie kolejnoscia wywolan. Debugger wskazalby Ci kiedy wykonywany jest kog metody Instance. Co do zmiennych statycznych to w C# zdaje sie inicjalizowane sa przy pierwszym uzyciu klasy (ale nie dam sobie glowy uciac za to stwierdzenie :) )

0

Static members are initialized before the static member is accessed for the first time and before the static constructor, if there is one, is called.

http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

0

ostroznie z taka klasa singletona, co sie stanie jezeli po niej podziedziczysz (a przeciez chyba po to jest stworzona) i stworzysz ja operatorem new (bo niby czemu nie?) i potem sprobujesz odwolania przez getInstance?

0

Co do Singletona to polecam zapoznać się z tymi linkami:

http://www.yoda.arachsys.com/csharp/singleton.html
http://en.csharp-online.net/Singleton_design_pattern:_Thread-safe_Singleton

Twoje rozwiązanie, delikatnie mówić jest nie najszczęśliwsze :)

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