简体   繁体   English

无法覆盖属性的受保护集

[英]Cannot override property's protected set

I have the following base class: 我有以下基类:

abstract class Base
{
 public abstract object Var
 {
  get;
  protected set;
 }
}

And this derived class: 而这个派生类:

class Derived : Base
{
 public override object Var
 {
  get {//code here
  }
  set {//code here -- I get error here!
  }
 }
}

But I'm getting this error: 但是我收到了这个错误:

Cannot change access modifier when overriding 'protected' inherited member 'Var' 覆盖'protected'继承成员'Var'时无法更改访问修饰符

I tried adding a protected and private keywords before set but it didn't help. 我尝试在设置之前添加protectedprivate关键字,但它没有帮助。 How do I fix this? 我该如何解决?

UPDATE: 更新:
The base class must make sure that subclasses provide a value for Var at creation time. 基类必须确保子类在创建时为Var提供值。 So I need to have the setter declared in Base class. 所以我需要在Base类中声明setter。
Alternatively, I could declare a private member variable to do this and remove the setter, but that is not an option as discussed here . 或者,我可以声明一个私有成员变量来执行此操作并删除setter,但这不是这里讨论的选项。

The problem is that the set in your derived class has public visiblity—since you didn't specify protected explicitly. 问题是派生类中的set具有public可见性 - 因为您没有明确指定protected Since this property's set has protected visibility in your base class, you're getting the error 由于此属性的集合在基类中具有受保护的可见性,因此您将收到错误

cannot change access modifiers when overriding 'protected' inherited member 覆盖'protected'继承成员时,无法更改访问修饰符

You can fix it by giving the set protected visibility in your derived class: 您可以通过在派生类中提供set protected protected visibility来修复它:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM