3

サードパーティのインターフェースを実装するクラスを書いています。インターフェイスの関数の 1 つは、タイプ「オブジェクト」のパラメーターを受け入れます。

関数内で、オブジェクト パラメーターとして関数に渡したい関数を呼び出す必要がありますが、機能させることができません。

例:

public class ABC : Ixyz
{
   ...
   public void DoSomething(object parameter);
   {
      // Here I will execute the function passed in
   }
   ...
}

public void MySomething()
{
   ...
}

public void SomeFunction()
{
   ABC myABCobject = new ABC();

   myABCobject.DoSomething(MySomething);
}

これをコンパイルしようとすると、次のエラーが発生します。

メソッド グループ 'MySomething' を非デリゲート タイプ 'object' に変換できません。メソッドを呼び出すつもりでしたか?

デリゲートで何かをしなければならない気がしますが、サードパーティのインターフェイスを実装しているため、関数の署名を変更できません。

「オブジェクト」を期待しているこの関数への参照を何らかの方法で渡すことはできますか? Delegate は Object を継承しているので、できると思います。

4

1 に答える 1

4

パラメータを DoSomething の呼び出しにアクションとしてキャストしてみてください - 例えば

myABCobject.DoSomething((Action)MySomething);

私はそれがうまくいくと確信しています...

実際、私はそれをテストしたところ、そうです-アクションをDoSomethingメソッドにキャストして呼び出すことができます-たとえば

var newparameter = (Action) parameter;
 newparameter();
于 2013-11-07T01:24:35.147 に答える