警告继承派生类中的抽象属性和字段

时间:2014-07-27 20:21:52

标签: c# .net inheritance properties

我在抽象类中有这个属性

private int m_base_salary;
abstract public int BaseSalary
{ get; set; }

在派生类中我有

private int m_base_salary;
    public override int BaseSalary
    {
        get { return m_base_salary; }

        set
        {
            if(value < MinSalary)
                throw new ArgumentOutOfRangeException();
            m_base_salary = value;
        }
    }

当我编译时,我在基类上得到一个警告,说明从未使用字段m_base_salary,这是可以理解的,因为它是双重声明的,并且从未在基类中使用过。如果我没有在派生类中声明该字段,则会收到一条错误消息,指出由于其保护级别而无法访问该字段。一种可能的解决方案是将它仅在基类中声明为内部,但它将被暴露。另一种解决方案只在派生类中声明它,通过这样做我失去继承,我需要继承该字段,并且如你所知,我不能在接口中声明字段。

对此有什么好的解决方案?

P.S m_base_salary是int,因为该程序旨在用于货币由千位给出而没有小数点的国家,我不需要浮动类型

1 个答案:

答案 0 :(得分:0)

将字段声明为protected而不是private。这意味着它可以从派生类访问,但不能从不相关的类访问。

但是,正如@Jon Skeet所说,在这种情况下没有理由这样做,这是错误的。

  • 也许您应该派生该类,并在该派生类中实现BaseSalary并创建m_base_salary字段(然后再将该类派生出来)。
  • 也许BaseSalary不应该是抽象的(如果某些类必须改变其实现,它可能是虚拟的)。我认为这将是一个更好的解决方案(虽然我不知道设计要求)。

但是创建一个抽象属性,以及该属性的后置字段,只在派生的类中实现是错误的。