title: How to inherit cloning methods properly?
body: <p>I have a base class (<code>A</code>) and a delivered one (<code>B</code>). They inherit the <code>ICloneable&lt;&gt;</code> generic interface that I made:</p>
  
  <pre><code>interface ICloneable&lt;T&gt;
  {
      T Clone();
  }
  </code></pre>
  
  <p>I would like to override the <code>A.Clone()</code> method in <code>B</code> but so, that <code>B.Clone()</code> returns an object of type <code>B</code> instead of <code>A</code>, however, overriding does not allow that.</p>
  
  <p>I have some kind of workaround, but I find it really ugly:</p>
  
  <pre><code>class A : ICloneable&lt;A&gt;
  {
      virtual A Clone() =&gt; /*magic*/;
  }
  class B : A, ICloneable&lt;B&gt;
  {
      B CloneAsB() =&gt; /*other kind of magic*/;
      override A Clone() =&gt; CloneAsB();
  }
  </code></pre>
  
  <p>(I also added explicit implementation of the non-generic <code>ICloneable</code>, but did not show it in the example.)</p>
  
  <p>Is there a better way to achieve this, without having to have a <em>false</em> clone method?</p>