title: Can you use the C# new keyword to expand properties on an interface?
body: <p>I understand how the "new" keyword can hide methods in a derived class. However, what implications does it have for classes that implement interfaces that use the keyword?</p>
  
  <p>Consider this example, where I decide to expand an interface by making its properties read/write.</p>
  
  <pre><code>public interface IReadOnly {
  
     string Id {
        get;
     }
  }
  
  public interface ICanReadAndWrite : IReadOnly  {
  
     new string Id {
        get;
        set;
     }
  }
  </code></pre>
  
  <p>Then you are able to do things like this:</p>
  
  <pre><code>public IReadOnly SomeMethod() {
     // return an instance of ICanReadAndWrite
  }
  </code></pre>
  
  <p>Is this bad design?  Will it cause issues for my classes that implement ICanReadAndWrite?</p>
  
  <p><strong>Edit:</strong>  Here is a contrived example of <em>why</em> I might want to do something like this:</p>
  
  <p>Say I have a factory class that returns an IShoppingCartItemReadWrite.  I can then have a service layer that manipulates prices on it, changes stuff, etc.  Then, I can pass these objects as IShoppingCartItemReadOnly to some kind of presentation layer that won't change them.  (Yes, I know it technically <em>can</em> change them-- this is a design question, not security, etc.)</p>