title: Abstract class instantiation in 'C# in depth'
body: <p>I'm reading 'C# in depth' by Jon Skeet currently and there's an example depicting Code Contracts with an abstract class implementing an interface which features as an accompanying class for the interface, in Code Contracts' terms: a 'Contract Class For' (I'm not going into details about the workings of Code Contracts here).</p>
  
  <p>The interface (p. 467):</p>
  
  <pre><code>[ContractClass(typeof(ICaseConverterContracts))]
  public interface ICaseConverter
  {
      string Convert(string text);
  }
  </code></pre>
  
  <p>The abstract class:</p>
  
  <pre><code>[ContractClassFor(typeof(ICaseConverter))]
  internal abstract class ICaseConverterContracts : ICaseConverter
  {
      public string Convert(string text)
      {
           Contract.Requires(text != null);
           Contract.Ensures(Contract.Result&lt;string&gt;() != null);
           return default(string); // returns dummy value
      }
  
      // prevents instantiation
      private ICaseConverterContracts() { }
  
  }
  </code></pre>
  
  <p>(I've added the comments in the code based on comments in the book)</p>
  
  <p>My question:</p>
  
  <p>Why is it necessary to add the private constructor to this abstract class when you can't instantiate an abstract class to begin with? What am I not getting?</p>