2017-10-04 6 views
-2

動的に作成されたオブジェクトを、それが拡張された特定のインターフェイスにキャストしたいと思います。作成したオブジェクトをインターフェイスタイプにキャスト

例:

動的にロードされたDLL:

public class Foo: IBar 
{ 
} 

実際のプログラム:あなたは型にキャストすることはできませんので、

var obj = code; // load assembly and fetch object 
Type type = obj.GetType().GetInterface("IBar"); 

IBar bar = (type) obj; 

明らかにこれは動作しません。他の方法はありますか?

+3

なぜ 'IBARバー=(IBAR)は、obj;'?あなたの制約は何ですか? –

+0

インターフェイスはDLL経由で動的にロードされます。 – Lyze

+1

動的にロードされていてもキャストできます。または、キャストではなく 'as'を使用してください。' IBar bar = obj as Ibar; if(bar!= null)... barで何かを実行する ' –

答えて

4

あなたは、2つのDLLが必要です。 1つは、プログラムと動的libの両方によって参照されるIBarをインプリメントするインターフェイスです。動的libの2番目。

は、その後、あなたは正常にキャストすることができます:

IBar bar = (IBar) obj; 
関連する問題