使用私有setter继承了自动实现的属性

本文关键字:实现 属性 继承 setter | 更新日期: 2023-09-27 18:02:34

我有一个基类和一个派生类。每个都有相同的属性,该属性有一个private设置器,因此该值可以由类内的一些逻辑设置。

class First
{
    internal virtual int Value { get; private set; }
    void SetValue(int toValue)
    {
        Value = toValue;
    }
}
class Second : First
{
    internal override int Value { get; private set; }
    void SetValue(int toValue)
    {
        Value = toValue;
    }
}

这导致编译器错误:

属性或索引器。。。不能在此上下文中使用,因为set访问器不可访问。

为什么会这样,我如何才能实现我想要做的事情?对于自动实现的属性,这是不可能的吗?换句话说,我是否必须使用后备字段?

使用私有setter继承了自动实现的属性

Second将无法从Firstset Value的值,因为Value的设置器是private。如果您需要您的子类能够设置它,那么它需要是基中的protected

Getters和Setter基本上是方法。不能覆盖看不到的方法。在这种情况下,virtual仅适用于getter,因为virtual private是不允许的。

这不仅仅是因为你看不到它来使用它,你根本无法覆盖它。