【问题标题】:Can't override property of the base class [duplicate]无法覆盖基类的属性[重复]
【发布时间】:2019-06-07 09:55:09
【问题描述】:

我试图在一个类的基础上创建一个新类,并且我想覆盖基类中的一个属性以删除 [必需]。但它没有覆盖,而是创建了一个同名的新属性。那么有什么问题,以及如何解决它。

namespace admin.models
{
    public class BaseClass
    {
        [Required]
        public string id { get; set; }
        [Required]
        public string name { get; set; }
    }

    public class NewClass : BaseClass
    {
        public new string name { get; set; }
    }
}

【问题讨论】:

  • 您需要在基类中声明属性virtualabstract,在派生类中声明override。基数:public virtual string id { get; set; },派生数:public override string id { get; set; }
  • 在这种情况下,我会使用abstract
  • 在您的方法中添加行var s = newClass.name; 并查看分配给s 的值。你做的很好。
  • @Archer 但如果他这样做了Baseclass b = newClass; var s = b.name;,他将获得基类版本。
  • 我强烈建议不要在这里使用继承。

标签: c# asp.net-mvc


【解决方案1】:

如果你想覆盖它,你需要将方法/属性标记为virtual。查看this link 了解更多信息。然后使用override 为该属性提供一个新的实现。

namespace admin.models
{
    public class BaseClass
    {
        [Required]
        public string id { get; set; }
        [Required]
        public virtual string name { get; set; }
    }

    public class NewClass : BaseClass
    {
        public override string name { get; set; }
    }
}

【讨论】:

  • 我不会投反对票,因为这可能是 OP 真正想要的,但我也不能投赞成票,因为 You need to mark the method/property as virtual if you want to make it possible to override it 不正确。
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 2017-07-05
  • 2019-10-13
  • 1970-01-01
  • 2016-11-13
  • 2015-09-30
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多