我正在使用名为SpreadsheetGear的库。有了这个,我就和#34; IWorkbook"我通过方法SpreadsheetGear.Factory.GetWorkbook()初始化的对象,其合同返回IWorkbook。
我想派生 实现一个接口并编写扩展方法,例如我定义
public partial interface IClientWorkbook : IWorkbook
所以我可以做类似
的事情 IClientWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook;
workbook.ChangeClientName("NewName");
并在其他地方定义ChangeClientName方法,但不能将其用于不属于IClientWorkbook的IWorkbooks。
我不确定如何处理此问题,因为无法看到GetWorkbook()方法返回的实际类。希望这个问题有道理。
答案 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
}
}