title: Still confused with BeforeFieldInit
body: <p>According to MSDN:</p>
  
  <blockquote>
    <p>BeforeFieldInit specifies that calling static methods of the type does not force the
    system to initialize the type.</p>
  </blockquote>
  
  <p>In addition to this (IMHO), the existence of static ctor will disable <code>BeforeFieldInit</code>.</p>
  
  <p>Now I want to check whether the type is not initialized if I invoke static method while my class has no static ctor as follows.</p>
  
  <pre><code>using System;
  
  namespace Static
  {
      class Foo
      {
          public Foo(string arg)
          {
              Console.WriteLine("Foo's ctor called by {0}.", arg);
          }
      }
  
      class Goo
      {
          Foo f2 = new Foo("Goo's instance field.");
  
          //static Goo() 
          //{
          //    Console.WriteLine("Goo's static ctor."); 
          //}
  
          static Foo f = new Foo("Goo's static field.");
  
          public Goo() 
          { 
              Console.WriteLine("Goo's default ctor.");
          }
  
          public static void Display()
          {
              Console.WriteLine("Goo's static method.");
          }
  
      }
  
      class Program
      {
          static void Main(string[] args)
          {
              Goo.Display();
  
              Console.ReadKey();
          }
  
      }
  }
  </code></pre>
  
  <p>And the output is as follows,</p>
  
  <pre><code>Foo's ctor called by Goo's static field..
  Goo's static method.
  </code></pre>
  
  <h2>Questions</h2>
  
  <p>Why does the static field still get initialized when I invoke a static method? It seems to be inconsistent with MSDN says above.</p>