我有一个现有的接口(有属性)是分离读写的最佳方法

时间:2017-09-11 19:18:01

标签: c# properties interface

使用C#我有一个现有的接口,我希望将其拆分为读写接口,但仍保留原始接口。什么是最好的方式?

我可以制作3个独立的界面:

interface IExistingReadWrite{
   int width {get; set;}
}

interface IRead{
   int width {get;}
}

interface IWrite{
   int width {set;}
}

或者我可以从IRead和IWrite中创建IExistingReadWrite,因此当他们查看IExistingReadWrite时,其他编码器更清楚,还有可用的隔离IRead和IWrite接口......

interface IExistingReadWrite: IRead, IWrite{
   new int width {get; set;}
}

interface IRead{
   int width {get;}
}

interface IWrite{
   int width {set;}
}

但我现在必须使用“新的”#39;在IExistingReadWrite上隐藏IRead和IWrite中的属性,否则会出现有关歧义的警告。影子并不是我的意图,我希望IExistingReadWrite能够将作品传递给'它所固有的接口比定义一个新属性(因此没有机会为每个单独的接口发生单独的实现)。有没有更好的方法。

1 个答案:

答案 0 :(得分:0)

到目前为止看起来Corak有最好的答案......在IExistingReadWrite上删除了IWrite界面,所以解决方案现在看起来像......

interface IExistingReadWrite : IRead
{
    // Use IWrite interface instead if you require write only.

    int width { get; set; }
}

interface IRead
{
    int width { get; }
}

public interface IWrite
{
    int width {set; }
}

这给了OK行为。如果您需要更高的安全性,可以添加适配器,例如:

    internal class WriteImpl : IWrite
{
    private IExistingReadWrite worker;
    internal FooWriteImpl(IExistingReadWrite i)
    {
        worker = i;
    }

    public string width
    {
        get { throw new Exception("Dave I cannot let you do that");}
        set { worker.width = value; }
    }
}