You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GroceryItem子类的FindCost方法中调用price属性?传递方式咨询

问题分析与解决方案

嘿,先看你代码里的两个关键问题:

  1. 你写的PurchasedItem是GroceryItem的嵌套类,不是子类(没加继承符号:),所以它没法直接访问外层类的实例属性;
  2. GroceryItem.price是实例属性,不是静态的,不能直接用类名调用,必须通过具体的对象实例来访问。

针对你的核心疑问——该从属性还是方法传递price?其实答案是直接通过属性访问更合理,但得先把类的结构调整对,下面给你两种可行的方案:

方案1:让PurchasedItem成为GroceryItem的子类

如果你本来就想让PurchasedItem作为GroceryItem的子类,那先修正继承关系,子类会自动继承父类的price属性,直接用就行:

class GroceryItem 
{ 
    public string name; 
    public double price; 

    public GroceryItem(string a, double b) 
    { 
        name = a; 
        price = b; 
    } 
}

// 让PurchasedItem继承GroceryItem
class PurchasedItem : GroceryItem 
{ 
    public int quantity; 

    // 子类构造函数必须调用父类构造函数,初始化name和price
    public PurchasedItem(string itemName, double itemPrice, int buyQuantity) : base(itemName, itemPrice)
    {
        quantity = buyQuantity;
    }

    public double FindCost() 
    { 
        // 直接访问继承来的price属性,用this.price或者base.price都可以
        return this.price * quantity * 1.10; 
    } 
}

class FreshItem 
{ 
    public double weight; 
}

这种情况下,price是子类实例自带的属性,不需要额外传递,直接用就好。

方案2:保留嵌套类结构,关联GroceryItem实例

如果你想维持嵌套类的设计,那得让PurchasedItem持有一个GroceryItem的对象引用,这样才能访问它的price属性:

class GroceryItem 
{ 
    public string name; 
    public double price; 

    public GroceryItem(string a, double b) 
    { 
        name = a; 
        price = b; 
    } 

    class PurchasedItem 
    { 
        public int quantity;
        // 保存GroceryItem的实例引用
        private readonly GroceryItem _parentItem;

        // 构造时传入对应的GroceryItem实例
        public PurchasedItem(GroceryItem groceryItem, int buyQuantity)
        {
            _parentItem = groceryItem;
            quantity = buyQuantity;
        }

        public double FindCost() 
        { 
            // 通过实例引用访问price属性
            return _parentItem.price * quantity * 1.10; 
        } 
    } 

    class FreshItem 
    { 
        public double weight; 
    } 
}

补充说明

至于你问的“从方法还是属性传递”——其实完全没必要写个方法来传递price,直接访问属性是最直接、符合C#设计习惯的方式。除非你有特殊需求(比如要对price做额外处理),才需要给GroceryItem加个GetPrice()方法,但那是多余的。

最后给你个调用示例(以方案1为例):

// 创建一个买了3个苹果的实例,单价2.5
var boughtApples = new PurchasedItem("Apple", 2.5, 3);
// 计算含10%税费的总价
double total = boughtApples.FindCost();
Console.WriteLine(total); // 输出8.25

内容的提问来源于stack exchange,提问作者Rosco verheij

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:02:20