导航:首页 > 方法技巧 > 委托链上的方法如何执行

委托链上的方法如何执行

发布时间:2024-03-13 23:26:03

㈠ 请问C#中的委托是什么如何使用

委托的用法很多:一般是用于声明事件和回调的委托,还可以是用于代表方法标签的委托.
书本上的委托只是对委托的定义与具体怎样调用问题,没有涉及到委托的真正实用的地方。其实委托是与事件和回调
一起来使用的,你可以看一下C#异步调用,与多线程处理里等就可以看到委托的作用了。
下面是别人的理解我觉得还是比较好的:
1)有了委托你就可以把方法看作像常数一样,而委托就是该常数类型的变量.
从这个角度看来用于声明事件的委托就是声明这个事件触发以后所调用的方法的标签或者特征.只有符合该标签(参数个数和参数类型)的方法才可以做为该用于该事件的回调.
一个事件触发了,你可能需要用多个方法处理该事件或者说该事件调用了多个方法(每个事件的实例都有一个需要调用的方法列表,当事件触发它会逐个调用列表中的每个方法)
2)通过使用委托你可以实现对方法变化的封装.
打个比方:如果你骑自行车,你需要有骑自行车的方法DriveBike().如果你骑摩托车你需要有骑摩托车的方法.现在你有一个方法DriveMoto.现在你需要定义一个方法,实现你骑(自行车或者摩托车)到某地DriveTo(地点,骑的方式)
骑的方式这里其实就是委托.在使用的时候,如果你是骑自行车你就用DriveBike实例化委托的实例带入DriveTo方法,如果你骑摩托车你就用DriveMoto实例化"骑的方式"这个委托带入DriveTo方法.

㈡ c#委托链的问题

你的委托d1上的确已经挂上了两个方法,当d1被调用的时候,那两个方法也的确都被触发调用到了。
不过多个方法有多个返回值,而只有一个变量来接受,所以后面被调用的方法的返回值,就把前面方法的返回值覆盖掉了。换句话说,前面的返回值都被丢弃掉了。

这也是定义事件委托的时采用void作为返回值的原因。

【回答补充】

你可以去看看系统类库提供的委托/事件,都是void返回类型的。

如果你非要做一个带返回值的委托,那可以这样做了:
......
public string CreateDelegate()
{
Class1 c1 = new Class1();
MyDelegate d1 = new MyDelegate(c1.delegateMethod1);
d1 += c1.delegateMethod2;
string d = "";
foreach (MyDelegate x in d1.GetInvocationList())
{
d += x("Hello World");
}
return d;
}
......

阅读全文

与委托链上的方法如何执行相关的资料

热点内容
高压电路通电试验步骤及方法 浏览:188
钙铁硫分析仪使用方法 浏览:565
东风天龙暖风开关总成安装方法 浏览:412
2022年浙江养老金计算方法 浏览:52
街头拦截调查方法的操作技巧 浏览:358
修补电池的简单方法 浏览:709
质量统计分析方法6种 浏览:120
春节礼物收纳方法图片 浏览:868
色度的测定方法视觉鉴别法 浏览:742
手汗脚汗多治疗的方法 浏览:644
黄金基本面分析方法 浏览:175
血液斑块怎么检查哪种方法好 浏览:734
吹低音的最佳方法 浏览:61
用酒精清洗厕所用什么方法最好 浏览:837
教室乱扔垃圾解决方法 浏览:948
甲状腺结节的治疗方法及标准 浏览:376
等差数列教学方法分析 浏览:107
联轴器耐磨检测方法 浏览:330
a8电脑声卡的使用方法 浏览:856
土壤农药残留检测方法 浏览:804