【问题标题】:Sharing a class between multiple classes [closed]在多个班级之间共享一个班级[关闭]
【发布时间】:2016-01-25 08:35:06
【问题描述】:

我有一个名为Manager 的类和另一个名为EmployeeFileHandler 的类,它继承自IFileHandler

我希望创建一个新类EmployeeInfo,我将能够从static-way 中的ManagerEmployeeFileHandler 访问它。但是,据我所知,static 关键字不能应用于继承/编辑类。

这可以通过任何方式完成吗?

【问题讨论】:

  • 您的 EmployeeFileHandler 必须是静态的吗?
  • 不,我的意思是 EmployeeInfo 是静态的,而不是 EmployeeFileHandler

标签: c# class inheritance static


【解决方案1】:

由于 C# 不支持多重继承,您可以通过以下任一方式实现:

  1. 拥有EmployeeInfo 的两个实例(has a 关系,而不是 is a 关系)。

    public class EmployeeInfo {
        public static Manager Manager = new Manager();
        public static EmployeeFileHandler EmployeeFileHandler = new EmployeeFileHandler();
    }
    

    因此,当您需要访问Manager 类方法时,您使用Manager 实例,而当您需要访问EmployeeFileHandler 方法时,您使用EmployeeFileHandler 实例。

  2. 或者,您也可以创建EmployeeInfo 来继承Manager 并实现IFileHandler 的接口

    public class EmployeeInfo : Manager, IFileHandler
    

    没关系,前提是EmployeeFileHandlerIFileHandler相比没有额外的方法

【讨论】:

  • 你说“有关系,而不是有关系”是什么意思?你能解释一下吗?
  • 有关系意味着它不是从那个类派生的,但仍然有那个类。例如。 Bob 是一个 Man,因此它具有 Man 的所有方法。但是鲍勃有一把剪刀,这意味着他可以用剪刀做他想做的事。一个 (is a) 表示您继承自,而另一个 (Has a) 表示您拥有它。在 C# 中,它看起来完全不同,请查看我的示例
  • 在您的第一个选项中,就像将EmployeeFileHandler 放在Manger 下一样,不是吗?我的Manager 是我的ViewModel。在这个类中,我想创建/编辑EmployeeInfo,然后使用EmployeeFileHandler 从文件中写入/加载EmployeeInfo - 问题是我想创建一个分离。我不希望数据与ViewModelFileHandler 混合。
  • @Idanis 在我的第一个选项中,实际上我将EmployeeFileHandler 放在EmployeeInfo 下而不是Manager 下。但是,如果您需要 EmployeeInfo 属于 class Manager,那么您可以考虑使用我部分展示的两种情况:EmployeeInfo : Manager 但您有一个 EmployeeFileHandler 的字段
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多