title: StyleCop and MultipleGenericInterfaces and CA1033
body: <p>I have an interface <code>IBakeable&lt;T&gt;</code> which has an event <code>OnCooked</code></p>
  
  <p>A couple of data classes <code>Pie</code> and <code>Bread</code></p>
  
  <p>And I have a classes which implements <code>IBakeable&lt;Pie&gt;</code> and <code>IBakeable&lt;Bread&gt;</code></p>
  
  <p>In order to implement this I think I have to implement the interfaces explicitly</p>
  
  <pre><code>public class BaseHeatSource: IBakeable&lt;Pie&gt;, IBakeable&lt;Bread&gt;
  {
      private event EventHandler OnPieCooked;
      event EventHandler IBakeable&lt;Pie&gt;.OnCooked
      {
          add {OnPieCooked+= value;}
          remove {OnPieCooked-= value;}
      }
  
      private event EventHandler OnBreadCooked;
      event EventHandler IBakeable&lt;Bread&gt;.OnCooked
      {
          add {OnBreadCooked+= value;}
          remove {OnBreadCooked-= value;}
      }
  }
  </code></pre>
  
  <p>And the class is inherited</p>
  
  <pre><code>public class Oven: BaseHeatSource
  {
  
  }
  
  public class Fire: BaseHeatSource
  {
  
  }
  </code></pre>
  
  <p>Now I get the equivalent of:</p>
  
  <blockquote>
    <p>CA1033    Interface methods should be callable by child types </p>
    
    <p>Make
    'BaseHeatSource' sealed (a breaking change if this class has
    previously shipped), implement the method non-explicitly, or implement
    a new method that exposes the functionality of
    'IBakeable.OnCooked.add(EventHandler)' and is visible to derived
    classes.</p>
  </blockquote>
  
  <p><a href="http://msdn.microsoft.com/en-us/library/ms182153.aspx" rel="nofollow">Msdn states</a>:</p>
  
  <blockquote>
    <p>If the derived type re-implements (explicitly) the inherited
    interface method, the base implementation can no longer be accessed.
    The call through the current instance reference will invoke the
    derived implementation; this causes recursion and an eventual stack
    overflow.</p>
  </blockquote>
  
  <p>Note that adding</p>
  
  <pre><code>protected void AddOnBreadCookedHandler(EventHandler handler)
  {
      this.OnBreadCooked += handler;
  }
  </code></pre>
  
  <p>does not resolve the rule.</p>
  
  <p>Do I have to suppress this rule? or is there a way of fixing it?</p>