title: Compiler says I am not implementing my interface, but I am?
body: <p>Okay, I have two namespaces. One contains my interface and one contains the implementing class. Like this:</p>
  
  <pre><code>namespace Project.DataAccess.Interfaces
  {
      public interface IAccount
      {
          string SomeMethod();
      }
  }
  
  namespace Project.DataAccess.Concrete
  {
      class Account : Project.DataAccess.Interfaces.IAccount
      {
          string SomeMethod()
          {
              return "Test";
          }
      }
  }
  </code></pre>
  
  <p>With this code I get an error:</p>
  
  <blockquote>
    <p>'Project.DataAccess.Concrete.Account' does not implement interface member 'Project.DataAccess.Interfaces.IAccount.SomeMethod'. 'Project.DataAccess.Concrete.Account.SomeMethod' cannot implement an interface member because it is not public</p>
  </blockquote>
  
  <p>If I make the class and method public it works fine. But if I instead qualify the method name with the interface name, that fixes it too. Why? Ex:</p>
  
  <pre><code>namespace Project.DataAccess.Concrete
  {
      class Account : Project.DataAccess.Interfaces.IAccount
      {
          string IAccount.SomeMethod()
          {
              return "Test";
          }
      }
  }
  </code></pre>
  
  <p>Why does this fix it? And why does it have to be public if I don't do that?</p>
  
  <h1>To be clear</h1>
  
  <p>I am well aware that making it public fixes it. Making the method signature look like this WITHOUT making anything public fixes it:</p>
  
  <pre><code>string IAccount.SomeMethod()
  </code></pre>
  
  <p>Why?</p>