我一直在寻找几天来解决 C 或 C++ 中的一个琐碎问题,但在 C# 中似乎不可能。
另一个程序员创建了A类。A类中的一个事件处理程序方法需要调用我B类中的一个方法来处理事件。根据事件的类型,B 类中的方法需要回调 A 类中的方法,并且该方法具有任意名称,甚至可能不存在。
这在 C 中很简单;您只有一个指向回调函数的指针,如果它不为空,则间接调用它。我不知道如何在 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# 中可能吗?