私はCまたはC++の些細な問題の解決策を数日間探していましたが、C#では不可能に見えます。
別のプログラマーがクラスAを作成します。クラスAのイベントハンドラーメソッドは、イベントを処理するためにクラスBのメソッドを呼び出す必要があります。イベントのタイプに応じて、クラスBのそのメソッドはクラスAのメソッドをコールバックする必要があり、そのメソッドは任意の名前を持っているか、存在しない場合もあります。
これはCでは簡単です。コールバック関数へのポインタがあり、nullでない場合は間接的に呼び出します。C#で間接的なメソッド呼び出しを行う方法がわかりません。これは、問題を説明するコードの例です。
public class A: ZZZ { // this class is NOT under my control
private b = new B(this);
public void myCallback(C x) {
// do something
}
// Elsewhere in the application expects a protected
// override method to exist in *this* class A to handle
// an event. But we want a method in class B to handle
// it and then call myCallback depending on the type of event
protected override void handle_some_event(event e) {
// doesn't work -- how do I pass a "pointer" to the callback??
b.handle_event(e, myCallback);
}
}
public class B { // this class IS under my control
private A base;
public B(A a) {
base = a; // allows for calling methods in class A from class B
}
public handle_event(event e, ??? callback pointer ??? cback) {
// do stuff...
// then do the callback
// cback(); // this won't work
base.myCallback(); // this WILL work but only if I hard-code "myCallback"
}
}
問題は、クラスBが私が書いているものであり、クラスAが私のクラスBを使用する他の誰かによって作成されていることです。他の誰かがコールバックをまったく定義しないか、任意のコールバックを作成するオプションがあります。名前。クラスBは、それが何であるか、そしてそれにアクセスする方法をどういうわけか知る必要があります。CまたはC++では、他のプログラマーは自分のコールバック関数へのポインターを渡すだけで済みます。それはC#で可能ですか?