任何人都可以告诉我,我提到的例子是否是回调机制的一个例子

时间:2011-05-06 07:15:15

标签: c#

class B
{
     public delegate void CallBack();
     public event CallBacl cllBack;

     void Publish()
     {
       cllBack();
     }
}

class A
{
     B b = new B();
     b.cllBack += new CallBack(test_this)

     public void test_this()
     {

     }
}
  1. 以上示例是否代表了在.net?
  2. 中实现回调机制的方法
  3. 或者我是否需要使用BeginInvoke和endInvoke作为回调机制?

3 个答案:

答案 0 :(得分:2)

  1. 是的,这是一种方法。无论如何,我会检查这个:if (cllBack != null) cllBack();
  2. BeginInvoke(look here)用于异步操作;你正在使用的方法是同步的。

答案 1 :(得分:1)

实现回调机制的方法有很多种,使用委托确实是其中之一。

有关begininvoke等信息,请参阅this,另请参阅that了解替代方案。

答案 2 :(得分:0)

一个警告,它让我感到痛苦:

b.cllBack += new CallBack(test_this)

当然在a中添加了对b的引用,所以即使你不再在任何其他地方使用b,b仍然被引用并且不会被垃圾收集。

我认为这是一种更简洁的方法:

class A
{
    private delegate B.CallBack myCallBack;
    private B b = new B();

    public A
    {
       myCallBack = new B.CallBack( test_this );
       b.cllBack += myCallBack;
    }


   public void Close()
   {
     c.cllBack -= myCallBack;
   }
}

简而言之,您需要回调时注册,并在不再需要回调时取消注册。

HTH

马里奥

PS:小心,你的b是ctor的本地人