<p>I have a class that inherits a generic dictionary and an inteface</p>

<pre><code>public class MyDictionary: Dictionary&lt;string, IFoo&gt;, IMyDictionary
{
}
</code></pre>

<p>the issue is that consumers of this class are looking for the '.Keys' and ".Values" properties of the interface so i added:</p>

<pre><code>    /// &lt;summary&gt;
    /// 
    /// &lt;/summary&gt;
    ICollection&lt;string&gt; Keys { get; }

    /// &lt;summary&gt;
    /// 
    /// &lt;/summary&gt;
    IEnumerable&lt;IFoo&gt; Values { get; }
</code></pre>

<p>to the interface.  </p>

<p>Now, the implementation needs to have this as well but when i implement these, i get this error:</p>

<p>"The keyword new is required because it hides property Keys . .. "</p>

<p>so what do i need to do.  Should i be adding a "new" in front of these get properties?</p>

The reason is that your keys and values properties are hiding the implementation of the keys and values properties in the Dictionary class.
EDIT:  Yes all you have to do is add the new keyword into you property.  So you code will look somthing like this:
```
```
class IFoo
{ }

interface MyDictionary
{
    ICollection<string> Keys { get; }

    /// <summary>
    /// 
    /// </summary>
    IEnumerable<IFoo> Values { get; }
}

class IStuff : Dictionary<string, IFoo>, MyDictionary
{
    #region MyDictionary Members

    //Note the new keyword.
    public new ICollection<string> Keys
    {
        get { throw new NotImplementedException(); }
    }

    public new IEnumerable<IFoo> Values
    {
        get { throw new NotImplementedException(); }
    }

    #endregion
}
```
```
I would still recommend implementing IDictionary though.