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

C# 使用私有setter继承自动实现的属性,c#,inheritance,properties,access-modifiers,C#,Inheritance,Properties,Access Modifiers,我有一个基类和一个派生类。每个属性都有一个相同的属性,该属性有一个privatesetter,因此可以通过类内的某些逻辑设置值 class First { internal virtual int Value { get; private set; } void SetValue(int toValue) { Value = toValue; } } class Second : First { internal override in

我有一个基类和一个派生类。每个属性都有一个相同的属性,该属性有一个
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;
    }
}
这将导致编译器错误:

属性或索引器。。。无法在此上下文中使用,因为 集合访问器不可访问


为什么会这样,我如何才能实现我的目标?对于自动实现的属性,这是不可能的,换句话说,我必须使用支持字段吗?

第二个
将无法
设置
第一个
的值,因为
的setter是
私有的。如果您需要您的子类能够设置它,那么它需要在基类中受到
保护。

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


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

你到底想实现什么?对我来说,拥有同名的独立属性听起来像是一场灾难。这就是虚拟成员背后的全部要点:能够用更具体的逻辑在派生类中重写它们。我不确定我是否理解你的推理。但是你没有具体的逻辑——你只有另一个自动实现的属性。如果将该属性视为公共get和私有集,则不能重写私有方法是非常有意义的。再说一次,你真正想要实现什么?你能举一个更有意义的例子吗?我打赌我已经看了大约20个关于这个问题的问答…受保护的访问修改似乎被忽略了。