如何跨对象链处理事件?

Pau*_*ter 8 .net c# events event-handling

如果有以下内容:

public static void main() { 
    MyClass1 obj = new MyClass1();
    obj.Method1();
}
public class MyClass1() {
    public void Method1() {
        MyClass2 obj = new MyClass2();
        obj.Method1();
    }
}
public class MyClass2() {
   public void Method1() {
       MyClass3 obj = new MyClass3();
       obj.Method1();
   }
}
public class MyClass3() {
   public void Method1() {
       // Raise event here that is handled in MyClass1?    
   }
}
Run Code Online (Sandbox Code Playgroud)

可以MyClass3.Method1()提出一个处理的事件MyClass1吗?

如果我想实现这一点,将如何编写事件处理代码?

Phi*_*nin 1

事件处理 ABC 假定您有订阅者和发布者。因此,您可能希望 MyClass3 具有公共事件,而 MyClass1 订阅此事件。

然而,在您的特定代码中,这种复杂性没有任何意义 - 最简单的方法就是使用回调函数:

public static void main() { 
    MyClass1 obj = new MyClass1();
    obj.Method1();
}
public class MyClass1{
    public void Method1() {
        MyClass2 obj = new MyClass2();
        obj.Method1(MyEventHandler);
    }

    public void MyEventHandler() {
    //...
    }

}
public class MyClass2{
   public void Method1(Action callback) {
       MyClass3 obj = new MyClass3();
       obj.Method1(callback);
   }
}
public class MyClass3{
   public void Method1(Action callback) {
       // Raise event here that is handled in MyClass1?    
       callback();
   }
}
Run Code Online (Sandbox Code Playgroud)