【问题标题】:Cannot override property's protected set无法覆盖属性的受保护集
【发布时间】:2012-01-31 04:06:56
【问题描述】:

我有以下基类:

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!
  }
 }
}

但是我收到了这个错误:

覆盖“受保护”继承成员“Var”时无法更改访问修饰符

我尝试在设置之前添加protectedprivate 关键字,但没有帮助。我该如何解决?

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

【问题讨论】:

    标签: c# inheritance overriding protected


    【解决方案1】:

    问题在于派生类中的set 具有public 可见性——因为您没有明确指定protected。由于此属性的设置在您的基类中保护了可见性,因此您会收到错误

    覆盖“受保护”继承成员时无法更改访问修饰符

    您可以通过在派生类中设置受保护的可见性来修复它:

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

    【讨论】:

    • 天哪!愚蠢的VS!正如我在帖子中所说,我已经尝试过,但没有帮助。当你提到它时我重试了,它仍然不起作用,我又看了你的答案,重新编译,它消失了!那我现在该怎么办?我应该接受你的回答还是应该删除我的帖子?
    • @AtoMerZ - 我会接受最佳答案并继续前进。由于该问题的答案已被投票,因此您需要一个 mod 来删除它。不值得给任何人带来麻烦。
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 2011-08-04
    • 2015-10-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多