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

C#调用Store类的start方法后如何访问方法内创建的实例对象

修复步骤

1. 修改Order类,增加关联披萨、客户的属性

public class Order
{
    // 新增两个关联字段
    private Pizza _orderedPizza;
    private Customer _orderCustomer;

    // 新增对应公共属性
    public Pizza OrderedPizza
    {
        get { return _orderedPizza; }
    }
    public Customer OrderCustomer
    {
        get { return _orderCustomer; }
    }

    // 修改构造函数,新增关联对象参数
    public Order(int priceBeforeTax, double tax, double totalPrice, Pizza orderedPizza, Customer orderCustomer)
    {
        _priceBeforeTaxes = priceBeforeTax;
        _tax = tax;
        _totalPrice = totalPrice;
        _orderedPizza = orderedPizza;
        _orderCustomer = orderCustomer;
    }

    // 原有其他代码保持不变
}

2. 为Customer类补充短参数构造函数

适配你当前只传姓名的创建逻辑:

public class Customer
{
    // 新增2个参数的构造函数重载
    public Customer(string customerFirstName, string customerLastName)
    {
        _customerFirstName = customerFirstName;
        _customerLastName = customerLastName;
    }

    // 原有其他代码保持不变
}

3. 修改Store类,按需选择方案

方案A:仅在start方法内完成打印,不需要对外暴露对象

class Store
{
    public void Start()
    {
        // 创建披萨
        Pizza vesuvio = new Pizza("Vesuvio", 75, "Tomato", "Cheese", "Ham");
        Pizza vegetarian = new Pizza("Vegetarian", 80, "Tomato", "cheese", "vegetables");
        Pizza contadina = new Pizza("Contadina", 75, "Tomato", "cheese", "mushrooms", "olives");

        // 创建客户
        Customer victor = new Customer("Victor", "Hansen");
        Customer jacob = new Customer("Jacob", "Pedersen");
        Customer maghrete = new Customer("Maghrete", "Ingrid");

        // 创建绑定了披萨和客户的订单
        Order victorOrdre = new Order(vesuvio.PizzaPrice, 1.25, vesuvio.PizzaPrice * 1.25, vesuvio, victor);
        Order jacobOrdre = new Order(vegetarian.PizzaPrice, 1.25, vegetarian.PizzaPrice * 1.25, vegetarian, jacob);
        Order maghreteOrdre = new Order(contadina.PizzaPrice, 1.25, contadina.PizzaPrice * 1.25, contadina, maghrete);

        // 批量打印订单信息
        List<Order> allOrders = new List<Order> { victorOrdre, jacobOrdre, maghreteOrdre };
        foreach (var order in allOrders)
        {
            Console.WriteLine($"客户姓名:{order.OrderCustomer.CustomerFirstName} {order.OrderCustomer.CustomerLastName}");
            Console.WriteLine($"披萨名称:{order.OrderedPizza.PizzaName}");
            Console.WriteLine($"订单总价:{order.TotalPrice}kr");
            Console.WriteLine("------------------------");
        }
    }
}

方案B:需要把所有对象返回给Main方法使用

修改Store类的返回值,用元组带回所有对象:

class Store
{
    public (List<Pizza> pizzas, List<Customer> customers, List<Order> orders) Start()
    {
        // 创建披萨
        Pizza vesuvio = new Pizza("Vesuvio", 75, "Tomato", "Cheese", "Ham");
        Pizza vegetarian = new Pizza("Vegetarian", 80, "Tomato", "cheese", "vegetables");
        Pizza contadina = new Pizza("Contadina", 75, "Tomato", "cheese", "mushrooms", "olives");
        List<Pizza> pizzas = new List<Pizza> { vesuvio, vegetarian, contadina };

        // 创建客户
        Customer victor = new Customer("Victor", "Hansen");
        Customer jacob = new Customer("Jacob", "Pedersen");
        Customer maghrete = new Customer("Maghrete", "Ingrid");
        List<Customer> customers = new List<Customer> { victor, jacob, maghrete };

        // 创建绑定了披萨和客户的订单
        Order victorOrdre = new Order(vesuvio.PizzaPrice, 1.25, vesuvio.PizzaPrice * 1.25, vesuvio, victor);
        Order jacobOrdre = new Order(vegetarian.PizzaPrice, 1.25, vegetarian.PizzaPrice * 1.25, vegetarian, jacob);
        Order maghreteOrdre = new Order(contadina.PizzaPrice, 1.25, contadina.PizzaPrice * 1.25, contadina, maghrete);
        List<Order> orders = new List<Order> { victorOrdre, jacobOrdre, maghreteOrdre };

        return (pizzas, customers, orders);
    }
}

对应修改Main方法:

class Program
{
    static void Main(string[] args)
    {
        Store store = new Store();
        var (pizzas, customers, orders) = store.Start();
        
        // 可在Main方法里任意访问所有对象、打印信息
        foreach (var order in orders)
        {
            Console.WriteLine($"客户姓名:{order.OrderCustomer.CustomerFirstName} {order.OrderCustomer.CustomerLastName}");
            Console.WriteLine($"披萨名称:{order.OrderedPizza.PizzaName}");
            Console.WriteLine($"订单总价:{order.TotalPrice}kr");
            Console.WriteLine("------------------------");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:36:07