C# 无法重写属性';s保护集

C# 无法重写属性';s保护集,c#,inheritance,overriding,protected,C#,Inheritance,Overriding,Protected,我有以下基类: abstract class Base { public abstract object Var { get; protected set; } } 这个派生类: class Derived : Base { public override object Var { get {//code here } set {//code here -- I get error here! } } } 但我得到了一个错误: 重写“受保护”继承的成员“V

我有以下基类:

abstract class Base
{
 public abstract object Var
 {
  get;
  protected set;
 }
}
这个派生类:

class Derived : Base
{
 public override object Var
 {
  get {//code here
  }
  set {//code here -- I get error here!
  }
 }
}
但我得到了一个错误:

重写“受保护”继承的成员“Var”时无法更改访问修饰符

我试着在设置之前添加一个
受保护的
私有的
关键字,但没有效果。我该如何解决这个问题

更新:
基类必须确保子类在创建时为
Var
提供一个值。所以我需要在基类中声明setter。

或者,我可以声明一个私有成员变量来执行此操作并删除setter,但这不是前面讨论的选项。

问题在于,派生类中的
集合
具有
公共
可见性,因为您没有显式指定
受保护
。由于此属性的集合在基类中保护了可见性,因此出现了错误

重写“受保护”继承的成员时无法更改访问修饰符

您可以通过在派生类中设置受保护的可见性来修复此问题:

class Derived : Base {
    public override object Var {
        get { return null; }
        protected set { // <------ added protected here
        }
    }
}
派生类:基{
公共覆盖对象变量{
获取{return null;}

保护集{//哦,我的天!愚蠢的VS!正如我在帖子中所说的,我已经尝试过了,但没有用。当你提到它时,我重试了一次,它仍然不起作用,我再次看了你的答案,重新编译,它就不见了!那么我现在该怎么办?我应该接受你的答案还是应该删除我的帖子?@AtoMerZ-我会接受最好的答案,然后继续。因为这个问题如果答案是向上投票的,你需要一个mod来删除它。这对任何人来说都不值得。