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

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

想学好编程,必须要懂得程序在内存的运行情况,这是老黄历了,使用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);

你现阶段确实没必要看程序在内存的运行情况,委托和事件,网上资料一大推,你可以随意看看。
委托:定义一个特定签名的类 ,能代表签名和他一样的一类方法,等着被调用。
定义委托: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,不能被重新赋值,只能添加删除绑定的方法。
总结:委托可以代表一类相同方法去执行,这时候相当于是一类方法的变量被调用;事件就是委托的进一步功能限制,使得委托本身值不可在类外部修改,只能增加或删除它上面的方法。