2016-11-18 108 views
0

我使用了一個名爲的SpreadsheetGear庫未知的類的實例具體。有了這個功能,我可以使用我通過SpreadsheetGear.Factory.GetWorkbook()方法初始化的「IWorkbook」對象,它的合同返回IWorkbook。添加擴展方法來實現已知接口

我想 獲得 實現的接口,並編寫擴展方法,例如我定義

public partial interface IClientWorkbook : IWorkbook 

,所以我可以做這樣的事情

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

某處定義ChangeClientName方法否則,但不適用於不是IClientWorkbook的IWorkbooks。

我不知道如何處理這是無法看到實際的類的GetWorkbook()方法返回。希望這個問題是有道理的。

+0

看我怎麼改變你原來的降價。請不要使用''
,降價變成新的生產線作爲''
當他們轉換成HTML。 –

+0

此外,你**實現**接口,而不是*派生*它們。 –

+0

如果'GetWorkbook'返回'IWorkbook',那麼你不能將它分配給更多派生的'IClientWorkbook'。你確定你不只是想在'IWorkbook'上創建你的擴展方法嗎? – juharr

回答

0

它必須是那麼容易,因爲

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

更徹底地閱讀任務,op無法訪問GetWorkbook返回的類型,因此無法實現IClientWorkbook界面。 – mambrow

+0

這是如何使我的解決方案錯誤?它**不會對IClientWorkbook的** real **類型產生任何影響,只需要該類型實現IClientWorkbook即可。 –

+0

你沒有錯,如果問題是「我如何實現擴展方法?」。不幸的是,您的解決方案沒有解決操作問題的根源。 – mambrow

2

當我明白你的問題,你要定義一個自定義界面(IClientWorkbook),您則需要通過對象實現從第三方API返回。你不可以做這個。您可以爲現有的類或接口實現擴展方法,但不能在不編輯該類的代碼的情況下將新接口添加到現有的類。另外,您不能創建不適用於擴展類型的所有實例的擴展方法。也就是說,您無法創建僅適用於某些IWorkbook實例的擴展方法 - 您沒有擴展方法,或者您有一個適用於所有IWorkbook實例的擴展方法。

你可以寫包裝類的第三方API的所有位,然後你可以實現你的類無論您選擇。這有時是值得的,但更多的時候不是。

+0

包裝類上的+1。但是,如果你這樣做,你不需要擴展方法,它可以只是你的包裝類的方法。 – mambrow