title: Why does callvirt IL instruction cause recursive invocation in virtual methods?
body: <p>IL doesn't always use <code>callvirt</code> instruction for <code>virtual</code> methods in a case like this:</p>
  
  <pre><code>class MakeMeASandwich{
    public override string ToString(){
      return base.ToString();
    }
  }
  </code></pre>
  
  <p>In this case, it is said that IL will produce <code>call</code> instead of <code>callvirt</code> where <code>callvirt</code> is produced to check whether <code>variable</code> is <code>null</code> or not and throws <code>NullReferenceException</code> otherwise.</p>
  
  <ol>
  <li>Why does a recursive invocation happen till stack overflow if <code>callvirt</code> is used instead of <code>call</code>?</li>
  <li>If <code>call</code> is used, then when does it check whether the instance variable it uses to call the methods is null or not? </li>
  </ol>