c# - 传递一个对象,继承它或使用直接方法

标签 c# oop inheritance object encapsulation

我是 C# 和 OOP 场景的新手,正在构建一个基础架构,以帮助我更好地理解 OOP 概念。这是我为了测试我的类知识而做的一个项目。有人可以复习一下并向我解释什么是更好的方法以及为什么吗?

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

  • deskClerk [具有返回 Customer 对象的 addCustomer 方法。]
  • 订单
  • 股票
  • 客户
  • 效用
  • 陈列室 [包含客户、库存和订单列表 - 所有列表 私有(private)的。 Showroom 也有 addCustomer 方法]

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

  1. 我可以将 Showroom 对象传递给 deskClerk,然后利用 在 Showroom 中添加客户的 addCustomer 方法。
  2. 我可以直接将客户添加到 Showroom,因为 Showroom 对象已有 addCustomer 方法。
  3. 我可以从 Showroom 继承 deskClerk 对象,在这种情况下 deskClerk 将能够使用 陈列室的 addCustomer 方法。

我的问题是:

  • 以上三个选项中哪个逻辑合理?
  • 陈列室甚至应该有一个 addCustomer 方法吗?陈列室 应该只是库存、客户和订单列表的存储对象,对吧?

最佳答案

您必须弄清楚客户是否可以在不参与陈列室的情况下存在,以及 DeskClerk 是否可以在不参与陈列室的情况下四处走动。

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

public class Showroom {
    public DeskClerk Clerk { get; private set; }
    public List<Customer> Customers { get; set; }
    [...]
}

如果没有陈列室,前台文员就没有多大用处,因此在其构造函数中将陈列室设置为依赖项:

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;
    }
}

不要认为有 2 个位置来添加客户是正确的,但 DeskClerk 仍然应该有这样做的责任。

但是,可能误解了您的问题 :-) 希望对您有所帮助!

关于c# - 传递一个对象,继承它或使用直接方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654047/

相关文章:

c++ - 使用 'delete' 运算符清理内存时出现“调试断言失败”错误

java - 将 ObjectMapper 声明为 bean 有什么好处?

javascript - 为什么这个函数可以工作但仍然返回 typeError ... is not a function?

javascript - 为什么我不使用 Child.prototype = Parent.Prototype 而不是 Child.prototype = new Parent();用于 Javascript 继承?

java - JPA继承建模问题

c# - 接口(interface)中的IList,实现中的List

c# - 编写一个针对 LLVM 的 C# 编译器是否有意义?

c# - Unity-Mono 在检查目录权限时抛出 PlatformNotSupportedException

c# - 仅在构造函数中设置类泛型值

Javascript继承构造函数