代码之家  ›  专栏  ›  技术社区  ›  MartyIX

是否可以在C#中不使用helper方法将一个事件注册到另一个事件?

  •  1
  • MartyIX  · 技术社区  · 16 年前

    我在不同的班级有两个相同的活动:

    A.eventA
    
    B.eventB
    

    我可以写一个方法:

    void return-value-of-delegate connect(parameters of delegate)
    {
       if (A.eventA != null)
       {
          A.eventA(parameters of delegate);
       }
    }
    

    谢谢!

    编辑:在类A中是指类B。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Jordão    16 年前

    无论何时 EventB EventA 同时激发:

    class A {
      private B b;
      public event EventHandler EventA {
        add {
          b.EventB += value;
        }
        remove {
          b.EventB -= value;
        }
      }
      public A() {
        b = new B();
      }
      // ...
    }
    

    现在,所有事件侦听器都已在类B中注册。

        2
  •  1
  •   decyclone    16 年前

    你不能在课外发起活动。只有类本身才能引发自己的事件。另一方面,您可以公开一个公共方法,该方法接受内部引发指定事件的相同参数。

    使用 Reflection 也不是只允许您订阅和从另一个类的事件中删除订阅的选项。

        3
  •  0
  •   Femaref    16 年前

    不,不能,除非代码在声明事件的类中。只能从声明类激发事件。您可能必须使用两个类的参数来使用一个事件,并反过来触发该事件,但是您不能保证它们将在同一时间(仅在大约相同的时间)被触发,这取决于注册到每个事件的方法,因为它们将在同一线程中执行。

        4
  •  0
  •   Dan Puzey    16 年前

    事件在不同类中定义的事实意味着它们是 同一事件,即使他们可能有相同的签名。不能同时从两个不同的类触发事件。

    一个班级的学生。哪一个例子 B.eventB 你什么时候开枪 A.eventA