Słowo kluczowe static używane jest do tworzenia elementów statycznych takich jak zmienna, metoda, klasa, operator, itd. Bez niego nie można byłoby zrobić wielu rzeczy. Wydaje mi się, że jest ono czasami nadużywane. Co więcej, często osoby, które je wykorzystują nie zdają sobie sprawy z niebezpieczeństw z nim związanymi.

Znajomy programista, z którym miałem przyjemność pracować mawiał, że każde użycie słowa static powoduje śmierć jednego programisty. I w sumie miał rację. Niejednokrotnie zdarzało nam się w trakcie refaktoryzacji zmieniać byty statyczne, na zwykłe.

Wydaje mi się, że najlepszym sposobem przedstawienia problemu będzie posłużenie się następującym przykładem:

public static class A
{
  public static int a = B.b + 1;
}

public static class B
{
  public static int b = A.a + 1;
}

public class Program
{
    static void Main(string[] args)
    {
      Console.WriteLine("a: " + A.a);
      Console.WriteLine("b: " + B.b);
    }
}

I na koniec pytanie. Co się stanie, kiedy będę chciał skompilować ten fragment kodu i go uruchomić?