c# – 无法覆盖属性的受保护集

前端之家收集整理的这篇文章主要介绍了c# – 无法覆盖属性的受保护集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下基类:
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!
  }
 }
}

但是我收到了这个错误

Cannot change access modifier when overriding ‘protected’ inherited member ‘Var’

我尝试在设置之前添加受保护和私有关键字,但它没有帮助.我该如何解决

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

解决方法

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

cannot change access modifiers when overriding ‘protected’ inherited member

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

class Derived : Base {
    public override object Var {
        get { return null; }
        protected set { // <------ added protected here
        }
    }
}
原文链接:/csharp/243796.html

猜你在找的C#相关文章