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
相关产品推荐
相关产品推荐

