只读接口,不需要抽象类中的主体?

时间:2014-11-17 23:52:28

标签: c# interface abstract-class

我希望能够在实例化类中可写的接口中创建只读属性,但是如果继承通过抽象类我遇到了问题:

interface IFoo {
    string Foo { get; }
}

abstract class Bar : IFoo {
}

class Baz : Bar {
    public string Foo { get; private set; }
}

这给了我一个错误Bar does not implement interface member IFoo.Foo。有没有办法绕过这个?我希望最终实例化的类确定setter的可见性。

1 个答案:

答案 0 :(得分:5)

你需要实现它抽象:

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

但是,当您执行此操作时,您可以选择覆盖Baz类中的可见性。

您可以做的最好的事情是在派生类中使用支持字段:

class Baz : Bar
{
    private string _foo;
    public override string Foo
    {
        get { return _foo; }
    }
}
关于重复问题的

This answer会详细说明原因。问题源于属性getter和setter是抽象的,而不是属性本身。