2016-11-18 30 views
0

私はSpreadsheetGearというライブラリを使用しています。これで、IWorkbookを返すメソッドSpreadsheetGear.Factory.GetWorkbook()メソッドで初期化する "IWorkbook"オブジェクトで作業します。既知のインターフェイスを実装する未知のクラスの特定のインスタンスに拡張メソッドを追加します。

私は にしたいので、私は

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

ような何かを行うことができますし、どこかChangeClientNameメソッドを定義にインターフェイスを実装し、拡張メソッドを記述し、例えば私は

public partial interface IClientWorkbook : IWorkbook 

を定義 を導き出しますそれ以外の場合は、IClientWorkbook以外のIWorkbookでは利用できません。

GetWorkbook()メソッドが返す実際のクラスが表示されないため、これにどう対処するかわかりません。うまくいけば質問が理にかなっています。あなたがオブジェクトによって実装されるようにしたい

+0

元のマークダウンをどのように変更したかを確認してください。「
」を使用しないで、markdownを使用すると、改行時に改行が「
」となります。 –

+0

また、**派生する*インタフェースの代わりに**インタフェースを実装します。 –

+0

'GetWorkbook'が' IWorkbook'を返した場合、それをより派生した 'IClientWorkbook'に割り当てることはできません。代わりに 'IWorkbook'で拡張メソッドを作成したくないだけですか? – juharr

答えて

0

それは私があなたの質問を理解しているように、カスタム・インタフェース(IClientWorkbook)を定義するように簡単

として
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の**実際の**タイプに意味を持たない** IClientWorkbookを実装するタイプのみがIClientWorkbookを実装する必要があります。 –

+0

あなたが間違っていないかどうか、質問が "私はどのように拡張メソッドを実装するのですか?"残念ながら、あなたの解決策はOSの問題の根本を解決しませんでした。 – mambrow

2

でなければなりませんが、サードパーティのAPIから返されました。あなたはこれをすることはできません。既存のクラスまたはインタフェースの拡張メソッドを実装できますが、そのクラスのコードを編集することなく既存のクラスに新しいインタフェースを追加することはできません。また、拡張タイプのすべてのインスタンスに適用されない拡張メソッドを作成することはできません。つまり、一部のIWorkbookインスタンスにのみ適用される拡張メソッドを作成することはできません。拡張メソッドを持たないか、すべてのIWorkbookインスタンスに適用される拡張メソッドがあります。

サードパーティAPIのすべてのビットについてラッパークラスを作成することができます。したがって、選択したクラスを実装できます。これは時にはそれに値するが、より頻繁にはそうではない。

+0

+1ラッパークラス。しかし、これを行うと、拡張メソッドは必要ありません。ラッパークラスのメソッドにすぎません。 – mambrow

関連する問題