继承一个类,但它通常是用静态方法创建的

本文关键字:静态方法 创建 一个 继承 | 更新日期: 2023-09-27 18:09:16

我有一个想要继承的类。也就是说,ExpenseForm应该继承自Spreadsheet。电子表格由第三方提供:我无法更改。

但是父类实例通常是用静态方法生成的:

Spreadsheet myExpenses = Spreadsheet.Open(filename);

(电子表格实现了iDisposable,所以上面的语句实际上是在using部分的顶部,但我不认为这真的影响到这个。)

我想要

ExpenseForm myExpenses = ExpenseForm.Open(filename);

当然失败了,因为ExpenseForm。Open(继承自Spreadsheet)返回一个电子表格对象。

解决这个问题的最好方法是什么?也许是扩展方法?(我没有这方面的经验。)

我已经走了不同的方向;ExpenseForm现在有一个电子表格实例。(这感觉有点混乱,因为我必须记录我的一次性物品,以便在我用完后清理。)但是我似乎错过了一个解决原始继承问题的方法。

继承一个类,但它通常是用静态方法创建的

你可以很容易地创建自己的ExpenseForm.Open方法:

public static new ExpenseForm Open(string file)
{
    // Do whatever you need
}

这是假设你可以创建一个子类,也就是说,有合适的构造函数可以链接到。您说您通常会使用Spreadsheet.Open,但是有受保护的或公共的构造函数可用吗?

我个人倾向于组合路线-你真的希望其他代码对待ExpenseForm,如果它是任何其他类型的Spreadsheet ?我通常更喜欢组合而不是继承——以我的经验,它使代码更容易推理。

如果Spreadsheet对象只能通过静态函数创建,那么继承就不是一个选项。只需在ExpenseForm中提供自己的Open静态函数,该函数返回此类对象。