将扩展方法添加到实现已知接口的未知类的特定实例

时间:2016-11-18 20:03:37

标签: c#

我正在使用名为SpreadsheetGear的库。有了这个,我就和#34; IWorkbook"我通过方法SpreadsheetGear.Factory.GetWorkbook()初始化的对象,其合同返回IWorkbook。

我想派生 实现一个接口并编写扩展方法,例如我定义

 public partial interface IClientWorkbook : IWorkbook

所以我可以做类似

的事情
 IClientWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook;
 workbook.ChangeClientName("NewName");

并在其他地方定义ChangeClientName方法,但不能将其用于不属于IClientWorkbook的IWorkbooks。

我不确定如何处理此问题,因为无法看到GetWorkbook()方法返回的实际类。希望这个问题有道理。

2 个答案:

答案 0 :(得分:2)

根据我的理解,您需要定义一个自定义接口(IClientWorkbook),然后您希望通过第三方API返回的对象来实现该接口。你不能做这个。您可以为现有类或接口实现扩展方法,但不能在不编辑该类的代码的情况下向现有类添加新接口。此外,您无法创建不适用于扩展类型的所有实例的扩展方法。也就是说,您无法创建仅适用于某些IWorkbook实例的扩展方法 - 您没有扩展方法,或者您有一个适用于所有IWorkbook实例的扩展方法。

您可以为第三方API的所有位编写包装类,然后您可以选择实现您的类。这有时是值得的,但往往不值得。

答案 1 :(得分:0)

必须像

一样简单
public static class ClientWorkbookExtensions {
    public static void ChangeClientName(this IClientWorkbook workbook, String newName) {
        workbook.Name = newName;    //  Or any other code you like
    }
}