不能覆盖属性的保护集
本文关键字:保护 属性 覆盖 不能 | 更新日期: 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'时不能更改访问修饰符
我尝试在设置前添加protected
和private
关键字,但没有帮助。我该如何解决这个问题?
更新:
基类必须确保子类在创建时为Var
提供一个值。所以我需要在基类中声明setter
或者,我可以声明一个私有成员变量来实现这一点,并删除setter,但这不是这里讨论的选项。
问题是您派生类中的set
具有public
可见性-因为您没有显式指定protected
。由于此属性的设置在基类中具有受保护的可见性,因此您会得到错误
在重写'protected'继承成员
时不能更改访问修饰符
你可以通过在你的派生类中设置protected可见性来修复它:
class Derived : Base {
public override object Var {
get { return null; }
protected set { // <------ added protected here
}
}
}