具有私有setter的继承自动实现的属性

时间:2015-07-14 16:14:02

标签: c# inheritance properties access-modifiers

我有一个基类和一个派生类。每个都具有相同的属性,其具有private setter,因此可以通过类中的某些逻辑来设置该值。

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;
    }
}

这导致编译器错误:

  

属性或索引器...不能在此上下文中使用,因为   设置访问者无法访问。

为什么会这样,我怎样才能实现我想做的事情?这是不可能使用自动实现的属性,换句话说,我是否必须使用支持字段?

2 个答案:

答案 0 :(得分:1)

由于Second的设置者为set

Value将无法First Value private的值protected。如果您需要子类来设置它,则它必须在基础中为Collections.sort()

答案 1 :(得分:0)

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

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