我有以下基类:
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'
时,无法更改访问修饰符
我尝试在设置之前添加protected
和private
关键字,但它没有帮助。我该如何解决?
更新
基类必须确保子类在创建时为Var
提供值。所以我需要在Base类中声明setter
或者,我可以声明一个私有成员变量来执行此操作并删除setter,但这不是讨论here的选项。
答案 0 :(得分:8)
问题是派生类中的set
具有public
可见性 - 因为您没有明确指定protected
。由于此属性的集合在基类中具有受保护的可见性,因此您将收到错误
覆盖“受保护”继承成员时,无法更改访问修饰符
您可以通过在派生类中提供set protected visibility来修复它:
class Derived : Base {
public override object Var {
get { return null; }
protected set { // <------ added protected here
}
}
}