在实现中可读/写的只读接口属性

时间:2014-11-14 19:09:00

标签: c# interface

我想要一个

interface IFoo
{
    string Foo { get; }
}

实现如下:

abstract class Bar : IFoo
{
    string IFoo.Foo { get; private set; }
}

我希望通过接口可以获取属性,但只能在具体实现中写入。最干净的方法是什么?我是否需要“手动”实现getter和setter?

4 个答案:

答案 0 :(得分:4)

interface IFoo
{
    string Foo { get; }
}


abstract class Bar : IFoo
{
    public string Foo { get; protected set; }
}

几乎和你一样protected,然后从类中的属性中删除IFoo.

我建议protected假设您只希望从INSIDE派生类访问它。相反,如果你想要它完全公开(也可以在课外设置),只需使用:

public string Foo { get; set; }

答案 1 :(得分:2)

为什么显式实现接口?这可以毫无问题地编译和工作:

interface IFoo { string Foo { get; } }
abstract class Bar : IFoo { public string Foo { get; protected set; } }

否则,您可以拥有该类的protected / private属性,并显式实现该接口,但将getter委托给该类的getter。

答案 2 :(得分:2)

要么实现隐式而不是显式

abstract class Bar : IFoo
{
    public string Foo { get; protected set; }
}

或添加支持字段

abstract class Bar : IFoo
{
    protected string _foo;
    string IFoo.Foo { get { return _foo; } }
}

答案 3 :(得分:0)

只需使用protected set并删除属性前的IFO即可隐藏它。

interface IFoo
{
    string Foo { get; }
}
abstract class Bar : IFoo
{
    public string Foo { get; protected set; }
}