无法覆盖属性的受保护集

时间:2011-12-31 18:39:38

标签: c# inheritance override 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!
  }
 }
}

但是我收到了这个错误:

  

覆盖'protected'继承的成员'Var'

时,无法更改访问修饰符

我尝试在设置之前添加protectedprivate关键字,但它没有帮助。我该如何解决?

更新
基类必须确保子类在创建时为Var提供值。所以我需要在Base类中声明setter 或者,我可以声明一个私有成员变量来执行此操作并删除setter,但这不是讨论here的选项。

1 个答案:

答案 0 :(得分:8)

问题是派生类中的set具有public可见性 - 因为您没有明确指定protected。由于此属性的集合在基类中具有受保护的可见性,因此您将收到错误

  覆盖“受保护”继承成员

时,

无法更改访问修饰符

您可以通过在派生类中提供set protected visibility来修复它:

class Derived : Base {
    public override object Var {
        get { return null; }
        protected set { // <------ added protected here
        }
    }
}