Is it possible somehow to achieve this behavior in C#:
public interface IReadOnly
{
Data Value { get; }
}
internal interface IWritable : IReadOnly
{
This isn't a problem:
public interface IReadOnly {
Data Value { get; }
}
internal interface IWritable : IReadOnly {
new Data Value { get; set; }
}
internal class Impl : IWritable {
public Data Value { get; set; }
}
The Impl.Value property implementation takes care of both IReadOnly.Value and IWritable.Value, as demonstrated in this test snippet:
var obj = new Data();
var target = new Impl();
var irw = (IWritable)target;
irw.Value = obj;
var iro = (IReadOnly)target;
System.Diagnostics.Debug.Assert(Object.ReferenceEquals(iro.Value, obj));