将setter添加到派生接口

doe*_*doe 33 c# interface getter-setter

是否有可能以某种方式在C#中实现此行为:

public interface IReadOnly
{
    Data Value { get; }
}

internal interface IWritable : IReadOnly 
{
    Data Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够将readonly接口公开给外部程序集,但在内部使用可写接口(我也可以用不同的方式实现).

我知道我可以使用一个实现但添加setter 的抽象类IReadOnly,但这迫使我从该类派生所有内部实现.

Han*_*ant 43

这不是问题:

public interface IReadOnly {
    Data Value { get; }
}

internal interface IWritable : IReadOnly {
    new Data Value { get; set; }
}

internal class Impl : IWritable {
    public Data Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该Impl.Value属性实现需要照顾两个 IReadOnly.Value和IWritable.Value,在本次测试片段展示:

        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));
Run Code Online (Sandbox Code Playgroud)