如何用不同于孩子的值初始化父类的属性

时间:2019-06-18 14:40:10

标签: c# .net oop

我的班级层次结构如下

class Category{
  protected int _discount;
}

class SubCategory:Category{
  // some other properties
}

class Item:SubCategory{
  // some more properties
 public Item (int discount){
  _discount = discount;
 } 
}

当我使用以下代码初始化Item时     物品=新物品(10); 它将Item类的_discount设置为10。我还想为SubCategory和Category类设置_discount值。 一种方法是在Item构造函数中传递3个不同的折扣值,并适当地分配给父母。

另一种方法是通过公开Item类中的方法来显式设置基类中的属性值。

是否还有其他最适合OOP概念的解决方案。在某个地方,我对这里的工作不太满意。

1 个答案:

答案 0 :(得分:2)

_discount变量没有作用域,因此是隐式private。您需要使它可由派生类访问,在这种情况下,您可能希望将其定义为protected(强调我):

  

受保护的成员可以在其类中访问,并且可以通过派生的类实例访问。

这意味着您的代码将是:

public class Category
{
  protected int _discount;
}

注意:这是一个很好的例子,说明为什么您应该始终指定所有事物的作用域。