不能覆盖属性的保护集

本文关键字:保护 属性 覆盖 不能 | 更新日期: 2023-09-27 18:19:06

我有以下基类:

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提供一个值。所以我需要在基类中声明setter
或者,我可以声明一个私有成员变量来实现这一点,并删除setter,但这不是这里讨论的选项。

不能覆盖属性的保护集

问题是您派生类中的set具有public可见性-因为您没有显式指定protected。由于此属性的设置在基类中具有受保护的可见性,因此您会得到错误

在重写'protected'继承成员

时不能更改访问修饰符

你可以通过在你的派生类中设置protected可见性来修复它:

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