hello world!!!!!

写下自己的一些心得,写下自己问题的方式,写下程序之路的艰辛,希望能够有朝一日成为大牛。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#之基础语法 event 如何触发回调事件

Posted on 2010-11-25 10:25  陈力  阅读(776)  评论(0编辑  收藏  举报

 本来c#这种语法会有容易让人歧义,读者问一想到,他有什么作用,我用别的方式完也是可以替代的了的

延续前面的文章,

 

            //MyDelegate d = new MyDelegate(p.InstanceMethod);
            //d(); //以委托为中介,进行转换,进而可以以把函数 作为函数的参数传递,有点拗口。

 

         但是有另外一种方式来,实现同样的情况,暂时只能给出这样的一个类比,进而说明问题的本身。

       函数回调,不过在回调之前要绑定,绑定就要用到event ,代码如下

 

代码
    public delegate void MyDelegate();   // delegate declaration
    public interface I
    {
        
event MyDelegate MyEvent;
        
void FireAway();
    }
    
public class MyClass : I
    {
        
public event MyDelegate MyEvent;
        
public void FireAway()
        {
            
if (MyEvent != null)
                MyEvent();
        }
    }
    
public class MainClass
    {
        
static private void f()
        {
            Console.WriteLine(
"This is called when the event fires.");
        }
        
static public void Main()
        {
            I i 
= new MyClass();
            i.MyEvent 
+= new MyDelegate(f); //进行事件绑定
            i.FireAway();                   //调用类的方法 -----> MyEvent(); -->回调 f
        }
    }

 我一直以为这个事件与委托没什么必要,其实这种的出现是在破坏面向对象,或许说的对,规则的建立,就是用于来破坏的

 i.MyEvent += new MyDelegate(f); //进行事件绑定,把f的函数地址赋给已经实例化的的i ,这样i在此时拥有了函数 f的地址.
            i.FireAway();      此时用于调用实例化对象i的方法

 

 

 在这个实例当中我看到在一个

实例化的对象中的方法 a

去调用

另外一个对象b中的方法 的时候    a并没有去实例化对象b,而是通过一种间接的方法,从而实现这样的一个功能,我们称之为方法的回调.     

 

  有不同意见的朋友,完全可以跟我来讨论.