我有一个我想继承的课程.即ExpenseForm应该从Spreadsheet继承.电子表格由第三方提供:我无法更改它.
但是父类实例通常使用静态方法生成:
Spreadsheet myExpenses = Spreadsheet.Open(filename);
(并且Spreadsheet实现了iDisposable,所以上面的语句实际上是在使用部分的顶部,但我认为这不会影响到这一点.)
我想要
ExpenseForm myExpenses = ExpenseForm.Open(filename);
当然,这会失败,因为ExpenseForm.Open(继承自Spreadsheet)会返回一个Spreadsheet对象.
解决这个问题的最佳方法是什么?也许扩展方法? (我没有经验.)
我走了一个不同的方向; ExpenseForm现在有一个Spreadsheet实例. (这感觉有点麻烦,因为我必须跟踪我的一次性物体以便在我完成时进行清理.)但似乎我错过了解决原始继承问题的方法.
最佳答案 那么你可以很容易地创建自己的ExpenseForm.Open方法:
public static new ExpenseForm Open(string file)
{
// Do whatever you need
}
这是假设您可以创建一个子类,即您可以链接到适当的构造函数.你说你通常会使用Spreadsheet.Open,但是有可用的受保护或公共构造函数吗?
就个人而言,无论如何我都喜欢编写路径 – 你真的希望其他代码将ExpenseForm视为任何其他类型的电子表格吗?我通常更喜欢构图而不是继承 – 根据我的经验,它使代码更易于推理.