title: Why is the .ctor() created when I compile C# code into IL?
body: <p>With this simple C# code, I run <code>csc hello.cs; ildasm /out=hello.txt hello.exe</code>.</p>
  
  <pre><code>class Hello
  {
      public static void Main()
      {
          System.Console.WriteLine("hi");
      }
  }
  </code></pre>
  
  <p>This is the IL code from ildasm.</p>
  
  <pre><code>.class private auto ansi beforefieldinit Hello
         extends [mscorlib]System.Object
  {
    .method public hidebysig static void  Main() cil managed
    {
      .entrypoint
      // Code size       13 (0xd)
      .maxstack  8
      IL_0000:  nop
      IL_0001:  ldstr      "hi"
      IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
      IL_000b:  nop
      IL_000c:  ret
    } // end of method Hello::Main
  
    .method public hidebysig specialname rtspecialname 
            instance void  .ctor() cil managed
    {
      // Code size       7 (0x7)
      .maxstack  8
      IL_0000:  ldarg.0
      IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
      IL_0006:  ret
    } // end of method Hello::.ctor
  
  } // end of class Hello
  </code></pre>
  
  <p>What's the use of <code>.method public instance void  .ctor()</code> code? It doesn't seem to do anything.</p>