free_rein_programmer
2016-12-16 17:16 阅读 982

小白求教c#委托和事件的用法,以及在内存中的运行情况

因为听人说过想学好编程,必须要懂得程序在内存的运行情况,今天学习了,委托和事件
,有点不太明白。求大神讲解一下

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-12-17 03:03

    想学好编程,必须要懂得程序在内存的运行情况,这是老黄历了,使用C/C++等没有垃圾回收的语言需要懂,使用C#,特别是初学者,没有必要懂这个(尤其是在别的还没有学好的情况下)

    委托事件没有你想的那么难,委托就是将函数当作一个类型使用。比如说,我们用Action这个类型代表一切没有返回值,没有参数的函数
    void foo() { ... } //这里定义一个函数
    int main()
    {
    Action a = foo; //将foo视作一个变量,而将void无参数的函数视作一种类型叫Action
    do100times(a);
    }
    下面定义一个叫do100times的函数,执行这个函数100次。
    void do100times(Action a)
    {
    for (int i = 0; i < 100; i++) a();
    }
    注意,这个函数可以将任何无参数、无返回值的函数执行100次。它调用的是a,至于这个a是foo还是别的函数,它不用管,这就是委托(delegate)的含义
    如果我们再写一个函数
    void bar() {...}
    一样可以调用
    do100times(bar);

    点赞 评论 复制链接分享
  • u011513884 孔越之秀 2016-12-18 15:34

    你现阶段确实没必要看程序在内存的运行情况,委托和事件,网上资料一大推,你可以随意看看。
    委托:定义一个特定签名的类 ,能代表签名和他一样的一类方法,等着被调用。
    定义委托:public delegate void MyDelegate(type param1,type param2,...);//一个返回值空,参数 为N个 type的委托,不需要有代码块
    使用前先初始化:MyDelegate myDelegate=new MyDelegate(YouDelegate);// YouDelegate(type param1,type param2,...){带实现的} 也必须是一个返回值空,参数 为N个 type的委托;
    可选:myDelegate+=SheDelegate;//只要传一个方法名字 注册到委托实例
    myDelegate+=HeDelegate;
    myDelegate+=ItDelegate;
    直接调用:myDelegate(param1,param2,...);这样将会依次调用注册方法。
    事件:public event MyDelegate myDelegateEvent;
    不用初始化直接注册方法:
    myDelegateEvent+=SheDelegate;//只要传一个方法名字 注册到委托实例
    myDelegateEvent+=HeDelegate;
    myDelegateEvent+=ItDelegate;
    注册后调用:myDelegateEvent(param1,param2,...);
    事件声明的修饰符用来限定+=(注册)和-=(取消注册)的访问权限,可以被外部调用。而事件myDelegateEvent,不能被重新赋值,只能添加删除绑定的方法。
    总结:委托可以代表一类相同方法去执行,这时候相当于是一类方法的变量被调用;事件就是委托的进一步功能限制,使得委托本身值不可在类外部修改,只能增加或删除它上面的方法。

    点赞 评论 复制链接分享

相关推荐