How to deal with interface inheritance and common properties?
What I would do is to use inheritance, but have only setter in IWritableItem:

public interface IReadableItem&lt;TKey&gt;
{
    TKey Key { get; }
}

public interface IWritableItem&lt;TKey&gt; : IReadableItem&lt;TKey&gt;
{
    new TKey Key { set; }
}


This still works as expected:

class Foo&lt;T&gt; : IWritableItem&lt;T&gt;
{
    public T Key { get; set; }
}


It also has the advantage that you can't implement the getter for IWritableItem differently from the getter for IReadableItem.