C# 如何从更高级别的类中选择特性

C# 如何从更高级别的类中选择特性,c#,C#,我试图从GroceryItem类调用price属性,以便在名为FindCost的GroceryItem子类中的方法中使用 我应该从GroceryItem方法还是属性传递它 class GroceryItem { public string name; public double price; public GroceryItem(string a, double b) { name = a; price = b; } c

我试图从
GroceryItem
类调用
price
属性,以便在名为
FindCost
GroceryItem
子类中的方法中使用

我应该从
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 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;
        }
    }
}
是的,不幸的是你也有。仅仅因为它是一个嵌套类,并不意味着这些类的实例有任何关系


您可以从
FindCost

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

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

  • 让我知道结果


    谢谢

    您需要在
    GroceryItem
    construct上创建一个
    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#online:

    根据您的要求制作子类,请参见下面的代码

    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();
    

    (与密切相关的语言Java不同)这并不意味着如果您定义了嵌套类,那么您就可以访问up类的属性。您是否需要创建子类?您不能创建继承层次结构吗?我建议您简要查看一下.NET Framework关于嵌套类型的指导原则:@DhavalR是必需的子类。我认为您可以使用composite来创建它。你可以试试我的答案:)@Roscoverheij