【问题标题】:How to initialize properties of parent class with different value than child如何使用与子类不同的值初始化父类的属性
【发布时间】:2019-06-18 14:40:10
【问题描述】:

我有以下类层次结构

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 类设置不同的值。 一种方法是在 Item 构造函数中传递 3 个不同的折扣值并适当地分配给父母。

我可以做的另一种方法是在 Item 类中公开方法以显式设置基类中的属性值。

还有其他最适合 OOP 概念的解决方案吗?在某个地方,我对我在这里所做的事情不太满意。

【问题讨论】:

  • 你的继承权在哪里?
  • 在谈到 OOP 中的继承时,诸如“父”和“子”之类的术语非常具有误导性。而是使用“基本类型/类”和“派生类型/类”(或“基本类型的特化”)之类的术语。就 OOP 继承而言,派生类型与其派生的基类型之间没有真正的父子关系。
  • @DavidG 我打算用作文来回答他,因为它看起来像这样,但是他如何在没有继承而不是作为财产的情况下获得 _discount?这不可能是代码...
  • 真的很抱歉没有指定继承。更新了问题

标签: c# .net oop


【解决方案1】:

_discount 变量没有范围,因此隐含为private。您需要让派生类可以访问它,在这种情况下,您可能希望它是 protected,它被定义为(强调我的):

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

这意味着您的代码将是:

public class Category
{
  protected int _discount;
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多