如何从更高级别的类中选择属性

  • 本文关键字:选择 属性 高级别 c#
  • 更新时间 :
  • 英文 :


>我正在尝试从GroceryItem类调用price属性,以在名为FindCostGroceryItem子类中使用的方法中使用。

我应该从GroceryItem方法还是属性传递它?

class GroceryItem
{
    public string name;
    public double price;
    public GroceryItem(string a, double b) {
        name = a;
        price = b;
    }
    class PurchasedItem
    {
        public int quantity;
        public double FindCost() {
            return GroceryItem.price * this.quantity * 1.10;
        } 
        class FreshItem
        {
            public double weight;
        }
    }
}

作为您制作子类的要求,请参阅下面的代码。

class GroceryItem
{
    public string name;
    public double price;
    public PurchasedItem pItem
    {
        get;
        set;
    }
    public GroceryItem(string a, double b)
    {
        name = a;
        price = b;
    }
    internal class PurchasedItem
    {
        GroceryItem item;
        public PurchasedItem(GroceryItem gItem)
        {
            item = new GroceryItem(gItem.name, gItem.price);
        }
        public int quantity;
        public double FindCost()
        {
            return item.price * this.quantity * 1.10;
        }
        class FreshItem
        {
            public double weight;
        }
    }
}

现在,您可以像下面这样制作GroceryItem实例。

GroceryItem item = new GroceryItem("Name", 1.00);
item.pItem = new GroceryItem.PurchasedItem(item);
item.pItem.quantity = 10;
double cost = item.pItem.FindCost();

您有几个选项可以从GroceryItem获得价格FindCost

  1. 您可以从GroceryItem继承PurchasedItem,这样您就可以在FindCost方法中拥有这些属性

  2. 可以在该 FindCost 方法中实例化 GroceyItem 类,然后读取 Price 属性。

让我知道结果

谢谢

您需要

在构造GroceryItem上创建一个PurchasedItem实例,然后在PurchasedItem对象构造参数中传递自身。

您可以按照此代码进行操作

class GroceryItem
{
    public string name;
    public double price;
    public PurchasedItem Purchased { get; private set; }
    public GroceryItem(string a, double b)
    {
        name = a;
        price = b;
        Purchased = new PurchasedItem(this);
    }
}
class PurchasedItem
{
    public int quantity { get; set; }
    private GroceryItem _groceryItem;
    public PurchasedItem(GroceryItem price)
    {
        _groceryItem = price;
    }
    public double FindCost()
    {
        return _groceryItem.price * this.quantity * 1.10;
    }
    class FreshItem
    {
        public double weight;
    }
}

如果要使用GroceryItem.FindCost()方法。

您可以直接像这样使用。

GroceryItem grocery = new GroceryItem("test",100);
grocery.Purchased.FindCost()

C# 在线 : http://rextester.com/DQR17613

用清晰的语言回答您的问题:

我应该从杂货项方法还是属性传递它?

是的,不幸的是你也有。仅仅因为它是一个嵌套类,并不意味着这些类的实例有任何关系。

链接到"静态"文档

最新更新