解构委托、事件--我对他们本质的理解

一、委托

1、因为委托是一个特殊的类,所以定义委托和定义类一样,可以在命名空间下定义;

namespace _06委托的理解
{
    public delegate void MyDeleget();//第一一个委托

    public class MyClass { };//第一个类
}

  

2、委托可以看成是一个特殊的集合,所以委托也可以在类的内部定义:

public class MyClass2
{
    public delegate void MyDelegat2();//委托也可以定义在类的内部
}

  

但是在类内部定义的委托,就专属于这个内,其他类不能直接声明这个委托。

3、委托的参数只能是方法。在声明的一个新的委托时,因为委托是一个特殊的类,而委托的构造函数需要一个参数以供初始化用。如果委托是一个字段,因为字段的位置不能获取方法名,所以字段位置无法直接初始化一个委托,而必须在方法内部完成初始化。

public class MyClass3
{
    public MyClass myClass = new MyClass();
    public MyDelegate1 myDelegate1 = new MyDelegate1();//错误 CS1729 “MyDelegate1”不包含采用 0 个参数的构造函数
    public void MyMethod3()
    {
        myDelegate1 = new MyDelegate1(myClass.MyMethod);//必须在方法内实例化,实例化时至少传入一个方法,方法不能带(),因为在C#里()表示立即运行,而这时候我们并不需要立即运行   
    }
}

  

4、委托的实质是一个类型安全的指针。可以避免在方法内直接调用另一个方法导致的可能出现的安全问题,而且提高了程序可扩展性。(这来自教科书,可以结合引用类型的特征来理解)

5、调用委托

调用委托,只要直接按  委托名();

需要注意的是,如果是多播委托(传入了多个方法),那这样运行会按传入的方法的先后逐个运行所有方法。

二、事件

事件的本质是编译器对委托的进行一个简单的封装。

当我们为事件传递方法时,将调用一个隐藏的方法 add_委托名(委托) 来添加这个方法。移除时则调用一个隐藏的 remove_委托名(委托)方法来移除。

所以,声明一个事件,实际上是新建一个封装好的多播委托。

时间: 2024-08-08 05:20:12

解构委托、事件--我对他们本质的理解的相关文章

ES6学习及总结(二):对象的解构

ES6学习及总结(二):对象的解构 一:数组的解构 1:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring).本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的值. let [foo, [[bar], baz]] = [1, [[2], 3]]; foo // 1 bar // 2 baz // 3 let [ , , third] = ["foo", "bar", "

详解C#委托,事件与回调函数

.Net编程中最经常用的元素,事件必然是其中之一.无论在ASP.NET还是WINFrom开发中,窗体加载(Load),绘制(Paint),初始化(Init)等等.“protected void Page_Load(object sender, EventArgs e)”这段代码相信没有人不熟悉的.细心一点一定会发现,非常多的事件方法都是带了“object sender, EventArgs e”这两个参数.这是不是和委托非常相似呢? 一.委托(有些书中也称为委派) 委托是什么呢?这个名字的意思已

JavaScript中事件委托(事件代理)详解

在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递).前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收. 事

3. 变量的解构赋值

目录 一. 数组的解构赋值 二. 对象的解构赋值 三. 字符串的解构赋值 四. 布尔和数值的解构赋值 五. 函数的解构赋值 六. 用途 总结 一. 数组的解构赋值 ES6允许按照一定的模式,从数组和对象中提取值,对变量进行赋值,这被称为解构 模式匹配:本质上,这种写法属于模式匹配,只要等号两边的模式相同,左边的变量就会被赋予相应的值 如果解构不成功(即左边的值在右边找不到对应的),则返回undefined 如果等号右边的不是数组(或者说不是可遍历的解构),那么将会报错 默认值,解析赋值允许执行默

es6学习 -- 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数组进行解构的例子. 我认为

C#委托事件

1.委托事件关键词:delegate 2.在声明函数的时候在函数类型后面加上 例:public delegate int Test(int x,int y) 3.定义委托变量:Test t1,委托接收的是方法引用. 4.委托变量可以当成函数的调用.用赋值“=” 委托变量 = 函数名 5.委托类型的变量,可以引用任何一个满足要求的方法,类似于C语言的函数指针. 6.一个委托变量可以使用“+=”挂接多个方法,也能使用“-=”动态地移除某个方法的引用. 7.引用多个方法的委托变量称为“多路委托”. 8

ECMAscript6新特性之解构赋值

在以前,我们要对变量赋值,只能直接指定值.比如:var a = 1;var b = 2;但是发现这种写法写起来有点麻烦,一点都不简洁,而在ECMAScript6中引入了一种新的概念,那就是"解构",这种赋值语句极为简洁,比传统的属性访问方法更为清晰.那什么是解构呢?按照一定的模式,允许从数组或者对象中获取到值,并且对其变量进行赋值.称为"解构". 看到上图了吧,解构是不是很简洁.其实解构不单用于数组.对象,只要内部具有iterator接口,就都可以使用解构来给变量赋

解构《穹顶之下》:新媒体形态如何重构传统媒体基因

3月1日,今天北京的空气质量指数(AQI)96,空气质量状况为"良",这比前一天重度污染的雾霾天算是略有了好转.但关于此话题的关注度和讨论热烈指数并没因此而下降. 2月28日,柴静将其采访.录制了一年的雾霾污染调查类专题纪录片<穹顶之下>正式推向公众,并迅速引发全民热议,成为2015年第一场公众事件. 公开数据显示,从上午10点正式发布到晚20点左右,该视频播放量腾讯2620万.3267条评论:优酷为401万.9088条评论:搜狐76万.172条评论:乐视305万.3条评论

ES6--变量的声明及解构赋值

ES6的目标是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言:该标准已于2015年6月17日正式发布.但是真正的普及我认为还得需要一段时间,然而这并不是理由让我们不去了解ES6.更重要的一点是,Google公司的V8引擎已经部署了ES6部分特性,对于NodeJS的开发者来说应该熟练掌握. 在浏览器没有全面支持的情况下,Google公司推出了Traceur转码器(https://github.com/google/traceur-compiler),可将ES6编译