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

时间:2018-04-23 06:33:52

标签: c#

我尝试从price类调用GroceryItem属性,以便在名为GroceryItem的{​​{1}}子类中的方法中使用。

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

GroceryItem

4 个答案:

答案 0 :(得分:2)

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

  

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

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

Link to 'static' documentation

答案 1 :(得分:2)

您可以选择从GroceryItem

中的FindCost获取价格
  1. 您可以从PurchasedItem继承GroceryItem,这样您就可以在FindCost方法

  2. 中拥有这些属性
  3. 您可以在GroceyItem方法中实例化FindCost类,然后阅读Price属性。

  4. 让我知道结果

    由于

答案 2 :(得分:2)

您需要在PurchasedItem构造上创建GroceryItem个实例。然后在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:http://rextester.com/DQR17613

答案 3 :(得分:2)

作为制作子课程的要求,请参阅以下代码。

? E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.Collection.contains(java.lang.Object)' on a null object reference
    at android.support.v4.util.MapCollections.retainAllHelper(MapCollections.java:479)
    at android.support.v4.util.ArrayMap.retainAll(ArrayMap.java:161)
    at android.support.v4.app.FragmentTransition.captureOutSharedElements(FragmentTransition.java:799)
    at android.support.v4.app.FragmentTransition.configureSharedElementsOrdered(FragmentTransition.java:698)
    at android.support.v4.app.FragmentTransition.configureTransitionsOrdered(FragmentTransition.java:330)
    at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:134)
    at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2379)
    at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337)
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:853)
    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:807)

现在你可以像下面那样制作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