首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递对象、继承对象或使用直接方法

传递对象、继承对象或使用直接方法
EN

Stack Overflow用户
提问于 2012-03-11 10:08:59
回答 2查看 216关注 0票数 3

我是C#和OOP场景的新手,正在构建一个基础设施,这将帮助我更好地理解OOP的概念。这是我做的一个项目,用来测试我的课堂知识。有人能仔细研究一下并向我解释什么是更好的方法吗?为什么?

以下是我的C#程序中的对象:

object.

  • Order

  • Stock

  • Customer

  • Utility

  • Showroom
  • deskClerk有一个addCustomer方法,该方法返回一个客户addCustomer,包含客户、股票和订单列表-所有列表都是私有的。展厅还有addCustomer method

我希望deskClerk对象向Showroom对象添加一个客户。为此,我有以下选择:

  1. I可以将展厅对象传递给deskClerk,然后使用展厅内的addCustomer方法添加客户。由于展厅对象已经有addCustomer方法,所以
  2. 可以直接将客户添加到展厅。
  3. ,我可以从展厅继承deskClerk对象,在这种情况下,deskClerk将能够使用展厅的addCustomer方法添加到客户列表中。

我的问题是:

以上三种选择中的哪一种有声音logic?

  • Should展厅甚至有addCustomer方法?展厅只应该是库存、客户和订单列表的存储对象,对吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-11 10:53:25

您必须计算出一个客户是否可以存在,而不是在展厅中的一部分,以及一个DeskClerk是否可以在展厅中浮动,而不是在展厅中。

如果是这样的话,我会做这样的事情

代码语言:javascript
复制
public class Showroom {
    public DeskClerk Clerk { get; private set; }
    public List<Customer> Customers { get; set; }
    [...]
}

如果没有展示厅,办公桌办事员就不会有多大用处,因此在其构造函数中将陈列室设置为依赖关系:

代码语言:javascript
复制
public class DeskClerk {
    private ShowRoom { get; set; }
    public DeskClerk(ShowRoom showRoom) {
        ShowRoom = showRoom;
    }
    public Customer AddCustomer(Customer customer) {
        //do stuff with customer object
        ShowRoom.Add(customer);
        return cutomer;
    }
}

不要认为有两个地方可以添加客户是不正确的,但是DeskClerk仍然应该有这样做的责任。

然而,你可能误解了你的问题:-)希望它有帮助!

票数 1
EN

Stack Overflow用户

发布于 2012-03-11 11:25:52

我喜欢你处理这个问题的方法。所以读你的问题:

  • 每个选项都有一个合理的逻辑,因此您的选择取决于

如何构造对象以及如何使用它们。作为一个程序员,我建议您使用第二个或第三个。

  • 是的,展厅可以有一个addCostumer方法,在这种情况下,如果您想使用第二个或第三个选择,它必须有一个addCostumer方法,如果您想要在存储中添加一个客户。

这里使用的第三个选项是我的示例代码:

代码语言:javascript
复制
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);
    }

    //...
}

所以我可以告诉你另一件事:

每次使用对象时,都要赋予每个对象他的角色和任务,然后每一个选择都取决于您想要使用的逻辑。选择一个你认为会有用的,并且适合你想要使用它的上下文。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9654047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档