继承一个类,但它通常是用静态方法创建的
本文关键字:静态方法 创建 一个 继承 | 更新日期: 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
静态函数,该函数返回此类对象。