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

本文关键字:主体 抽象类 不需要 接口 只读 | 更新日期: 2023-09-27 18:30:39

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

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.有什么办法可以规避这一点吗?我希望最终实例化的类确定二传手的可见性。

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

你需要抽象地实现它:

abstract class Bar : IFoo
{
    public abstract string Foo { get; }
}
但是,当您

执行此操作时,您似乎无法选择覆盖 Baz 类中的可见性。

你能做的最好的事情是在派生类中使用支持字段:

class Baz : Bar
{
    private string _foo;
    public override string Foo
    {
        get { return _foo; }
    }
}

这个关于重复问题的答案更详细地说明了原因。问题源于这样一个事实,即属性获取者和二传手是抽象的,而不是属性本身。