gpt4 book ai didi

c# - 将 setter 添加到派生接口(interface)

转载 作者:IT王子 更新时间:2023-10-29 04:08:07 24 4
gpt4 key购买 nike

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

public interface IReadOnly
{
Data Value { get; }
}

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

我希望能够向外部程序集公开一个只读接口(interface),但在内部使用一个可写接口(interface)(我也可以用不同的方式实现)。

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

最佳答案

这不是问题:

public interface IReadOnly {
Data Value { get; }
}

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

internal class Impl : IWritable {
public Data Value { get; set; }
}

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));

关于c# - 将 setter 添加到派生接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com