首页 新闻 会员 周边

c#委托类型及实例问题

0
[已解决问题] 解决于 2017-09-27 08:25

为什么声明委托类型的时候后面要加();它不是一个类吗?正常的话类后面是加一个{};而它为什么要加();或者说为什么要这样设计。

为什么调用委托实例的时候后面要加();正常的话调用某个对象,我们不是直接 Class.xx就可以了吗?只有调用方法的时候是xx();既然委托是一个类,那它的实例就是一个对象,为什么后面要加();求大神指教

痴王的主页 痴王 | 菜鸟二级 | 园豆:210
提问于:2017-09-22 11:33
< >
分享
最佳答案
2

委托是一种特殊的类,其派生关系如下

yourHandler->MulicastDelegate->Delegate

这个关系你可以从其BaseType中看到。

说它特殊就特殊在它的申明方式和普通对象的不一样,而且每当你创建了这个对象后就会继承3个方法下来(invoke及异步的两个),而这样设计(表述)的方式你要去问看CLI了。

说其特殊性,也就是你大括号小括号的问题吧,这个其实也只是一个表达的问题,到至少需要满足一个要求,委托既然定义为类型安全的方法指针,那么用小括号就不足为奇了吧。比如

Result dummyMethod(object sender,Paramter args)这样一个方法现在对应的其委托方法写法

delegate Result yourDelegate(object sender,Paramter args)表意其实很清楚了。

如果你写成delegate Result yourDelegate{object sender,Paramter args},这个我觉得还好吧(当然语法不支持)。

 

调用的时候你也可以写完整:

xxxHandler.Invoke(parameter here),不写Invoke只是个语法糖而已,其il还是Invoke了。

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10424 | 2017-09-22 14:51

很厉害,有自己的见解,佩服你们

痴王 | 园豆:210 (菜鸟二级) | 2017-09-22 14:58

你好,我怎么可以看他的CLI呢

 

痴王 | 园豆:210 (菜鸟二级) | 2017-11-03 17:29

@痴王: 我记得ms还是哪有cli的文档,相当大的一个pdf,里面介绍的相当详细。

Daniel Cai | 园豆:10424 (专家六级) | 2017-11-03 17:58
其他回答(1)
2

委托是一个方法签名.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-09-22 13:04

方法签名意思就是方法吧

 

支持(0) 反对(0) 痴王 | 园豆:210 (菜鸟二级) | 2017-09-22 14:03

@痴王: 不是.方法签名是一个方法的结构描述.

用来确定你要调用的放的参数和返回值结构.这样使用者就可以不关心方法的具体实现.

只要方法签名一样.就能调用.而不管这个方法里面到底是什么代码

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-09-22 14:10

@吴瑞祥: ok,我明白了,您说如果归类,要把方法签名这个知识点放在方法下面吗?还是放在哪块比较好

支持(0) 反对(0) 痴王 | 园豆:210 (菜鸟二级) | 2017-09-22 14:14

@痴王: 不知道.

我学这个的时候是有2次的.

一次是c++程序设计.我记得是在模版里讲的.相当于是和泛型一起

c#高级程序设计里.就忘了是那里的.这些东西找本教科书吧.照着教科书里的顺序是最好了

支持(0) 反对(0) 吴瑞祥 | 园豆:29449 (高人七级) | 2017-09-22 14:25

@吴瑞祥: 嗯嗯,好的,谢谢大师

支持(0) 反对(0) 痴王 | 园豆:210 (菜鸟二级) | 2017-09-22 14:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册