2

これは不可能だと思いますが、さらに掘り下げる前に、次のような方法があります。

public void ProcessInterface(ISomeInterface obj) {}

//...

dynamic myDyn = GetDynamic<ISomeInterface>() 
ProcessInterface(myDyn);

それを主張する投稿を見たことがありますが、含まれていないようです。

ちょっとしたコンテキスト: COM を介して公開された .Net アセンブリ -> インターフェイス実装クラスを使用する Silverlight アプリ。インターフェイスでオブジェクトを参照するといいでしょう。これが意図されたものだったとは本当に思いません...

4

3 に答える 3

6

いいえ、dynamic型がインターフェースを実装するふりをすることはありません (たとえ を介してdynamicすべてのメソッドを持っていたとしても)。に渡すと、ProcessInterface本質的にdynamic.

dynamic実装するオブジェクトと同じくらい呼び出し元のコードに依存します。もっと、さらに。

ただし、ダック タイピングを使用するインターフェイス ラッパーを作成することもできます。

class Foo : IBar {
    readonly dynamic duck;
    public Foo(dynamic duck) { this.duck = duck; }

    void IBar.SomeMethod(int arg) {
        duck.SomeMethod(arg);
    }
    string IBar.SomeOtherMethod() {
        return duck.SomeOtherMethod();
    }
}
interface IBar {
    void SomeMethod(int arg);
    string SomeOtherMethod();
}
于 2010-05-05T04:04:01.257 に答える
2

これを行うには、オープンソースのImpromptu-Interfaceを使用できます。これは、インターフェイス ラッパーを作成する自動化された方法であり、DLR を使用します。Impromptu.ActLike<ISomeInterface>(myDyn)

于 2011-02-28T14:58:03.460 に答える
2

私はあなたの主張を理解していないと思います。扱っているインターフェイスが正確にわかっている場合、なぜ を使用する必要があるのdynamicでしょうか?

于 2010-05-05T04:03:10.293 に答える