title: How can an interface implementation be protected?
body: <p>I just came across one thing in the .NET framework (v4.0) that I cannot understand:</p>
  
  <p>There is the class <code>SortDescriptionCollection</code></p>
  
  <pre><code>namespace System.ComponentModel
  {
      public class SortDescriptionCollection : Collection&lt;SortDescription&gt;, INotifyCollectionChanged
      {
          ....
          protected event NotifyCollectionChangedEventHandler CollectionChanged;
          ....
      }
  }
  </code></pre>
  
  <p>implementing the Interface <code>INotifyCollectionChanged</code>:</p>
  
  <pre><code>public interface INotifyCollectionChanged
  {
      event NotifyCollectionChangedEventHandler CollectionChanged;
  }
  </code></pre>
  
  <p>I wanted to use the event on the class but I cannot because it's protected. </p>
  
  <p>That's not the big problem because I can cast the implementation to the Interface and then use it.</p>
  
  <p>But how can that be built? If I try to do with</p>
  
  <pre><code>class MyDerivedType : INotifyCollectionChanged
  {
      protected event NotifyCollectionChangedEventHandler CollectionChanged;
  }
  </code></pre>
  
  <p>so the compiler says:</p>
  
  <blockquote>
    <p>'MyDerivedType' does not implement interface member
    'System.Collections.Specialized.INotifyCollectionChanged.CollectionChanged'.
    'MyDerivedType' cannot implement an interface member because it is not public.</p>
  </blockquote>
  
  <hr>
  
  <p><strong>EDIT:</strong>
  I don't think it's a duplicate. I was not asking <em>how</em> to compile the code above, it was the question how the .NET framework <em>seemed</em> to could do that (and obviously it couldn't)</p>