我想要一个
interface IFoo
{
string Foo { get; }
}
实现如下:
abstract class Bar : IFoo
{
string IFoo.Foo { get; private set; }
}
我希望通过接口可以获取属性,但只能在具体实现中写入。最干净的方法是什么?我是否需要“手动”实现getter和setter?
答案 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; }
}