C# 传递对象、继承对象或使用直接方法
我不熟悉C#和OOP场景,正在构建一个可以帮助我更好地理解OOP概念的基础设施。这是我做的一个项目,用来测试我的课堂知识。有人能仔细检查一下,向我解释一下什么是更好的方法,为什么 以下是我的C#程序中的对象:C# 传递对象、继承对象或使用直接方法,c#,oop,inheritance,object,encapsulation,C#,Oop,Inheritance,Object,Encapsulation,我不熟悉C#和OOP场景,正在构建一个可以帮助我更好地理解OOP概念的基础设施。这是我做的一个项目,用来测试我的课堂知识。有人能仔细检查一下,向我解释一下什么是更好的方法,为什么 以下是我的C#程序中的对象: deskClerk[具有返回Customer对象的addCustomer方法。] 命令 股票 顾客 效用 展厅[包含客户、库存和订单列表-所有列表 私人。展厅也有addCustomer方法] 我希望deskClerk对象将客户添加到Showroom对象。为此,我有以下选择: 我可以将陈
- deskClerk[具有返回Customer对象的addCustomer方法。]
- 命令
- 股票
- 顾客
- 效用
- 展厅[包含客户、库存和订单列表-所有列表 私人。展厅也有addCustomer方法]
- 以上三个选项中,哪一个逻辑合理
- 展厅是否应该有一个addCustomer方法?陈列室 应该只作为库存、客户和订单列表的存储对象,对吗
public class Showroom {
public DeskClerk Clerk { get; private set; }
public List<Customer> Customers { get; set; }
[...]
}
不要认为有两个位置可以添加客户是正确的,但是桌面职员仍然有责任这样做
然而,可能误解了您的问题:-)希望它有帮助 我喜欢你处理这个问题的方法。阅读你的问题:
- 每个选择都有合理的逻辑,因此您的选择取决于
如何构造对象以及如何使用对象。作为一名程序员,我建议您使用第二个或第三个 - 是的,展厅可以有一个AddCustomer方法,在这种情况下,如果您想使用第二个或第三个选项,那么如果您想向存储中添加一个Customer,它必须有一个AddCustomer方法
class Stock { /*...*/ }
class Customer { /*...*/ }
class Order { /*...*/ }
class Showroom
{
protected List<Stock> StockList;
protected List<Customer> CustomerList;
protected List<Order> OrderList;
public Showroom()
{
StockList = new List<Stock>();
CustomerList = new List<Customer>();
OrderList = new List<Order>();
}
public virtual void addStock(Stock stock)
{
StockList.Add(stock);
}
public virtual void addCustomer(Customer customer)
{
CustomerList.Add(customer);
}
public virtual void addOrder(Order order)
{
OrderList.Add(order);
}
//...
}
class deskClerk : Showroom
{
public deskClerk()
{
CustomerList = new List<Customer>();
}
public override void addCustomer(Customer customer)
{
CustomerList.Add(customer);
}
//...
}
类股票{/*…*/}
类客户{/*…*/}
类顺序{/*…*/}
班级陈列室
{
受保护名单;
受保护名单客户名单;
受保护列表订单列表;
公共陈列室()
{
StockList=新列表();
CustomerList=新列表();
OrderList=新列表();
}
公共虚拟无效addStock(股票)
{
股票列表。添加(股票);
}
公共虚拟客户(客户)
{
CustomerList.Add(客户);
}
公共虚拟无效添加订单(订单)
{
OrderList.Add(订单);
}
//...
}
班级职员:陈列室
{
办公桌文员()
{
CustomerList=新列表();
}
公共覆盖无效添加客户(客户客户)
{
CustomerList.Add(客户);
}
//...
}
所以我可以再给你提一件事:
每次处理对象时,都会给每个对象分配角色和任务,然后每个选择都取决于您想要使用的逻辑。选择一个你认为有效且适合你想要使用它的环境。你能告诉我更多关于你试图解决的现实问题吗?什么是甲板文员、客户和陈列室课程?柜台职员是干什么的?陈列室做什么?为什么它必须了解客户、库存和订单?客户、库存和订单是如何关联的?这是s的汽车展示厅软件模型,汽车展示厅肯定会有一个每天销售的“deskClerk”,以及一个可以评估销售的“StoreManager”。deskClerk需要有限的方法来访问他有权访问的字段。感谢您的解决方案,我最终没有从展厅继承deskClerk,因为即使没有展厅deskClerk也没用,deskClerk也可以为“任何”展厅工作。例如,一个电视遥控器和一个电视,一个电视遥控器能够与任何电视一起工作(忽略IR协议),因此从电视继承它将破坏制作电视遥控器的一般用途。然而,在TVRemote的构造函数中将TV设置为依赖项将更合适,以便远程设备知道为哪个TV工作。:)是的,你的推理是无可挑剔的,但在这种情况下,说到我的代码,
deskClerk
可能只是一个实用工具。使用您的代码的人可以直接使用展厅
。感谢您的解决方案,我最终使用了这个。如果您想知道我这样做的原因,请阅读我对@Fuex解决方案的评论:)
class Stock { /*...*/ }
class Customer { /*...*/ }
class Order { /*...*/ }
class Showroom
{
protected List<Stock> StockList;
protected List<Customer> CustomerList;
protected List<Order> OrderList;
public Showroom()
{
StockList = new List<Stock>();
CustomerList = new List<Customer>();
OrderList = new List<Order>();
}
public virtual void addStock(Stock stock)
{
StockList.Add(stock);
}
public virtual void addCustomer(Customer customer)
{
CustomerList.Add(customer);
}
public virtual void addOrder(Order order)
{
OrderList.Add(order);
}
//...
}
class deskClerk : Showroom
{
public deskClerk()
{
CustomerList = new List<Customer>();
}
public override void addCustomer(Customer customer)
{
CustomerList.Add(customer);
}
//...
}