加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:20:21 所属栏目:百科 来源:网络整理
导读:我有一个我想继承的课程.即ExpenseForm应该从Spreadsheet继承.电子表格由第三方提供:我无法更改它. 但是父类实例通常使用静态方法生成: Spreadsheet myExpenses = Spreadsheet.Open(filename); (并且Spreadsheet实现了iDisposable,所以上面的语句实际上是
我有一个我想继承的课程.即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视为任何其他类型的电子表格吗?我通常更喜欢构图而不是继承 – 根据我的经验,它使代码更易于推理.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读