C#之委托
2015-07-19 23:23
435 查看
------------------------- 关于委托的一些事儿 -------------------------------------
委托 delegate是只有一个函数的特殊的类,委托对象的引用相当函数指针。
委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。
对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。
委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;
只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。
使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给某个方法,而不必在编译时知道将调用哪个方法。
与
C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的。
-----------------------------------------------------------------------------
下面说说委托的使用步骤:
看个示例啦,先看看结果:
当点击启动按钮,俩进度条将自动充满。
源码:
委托 delegate是只有一个函数的特殊的类,委托对象的引用相当函数指针。
委托声明定义一种类型,它用一组特定的参数以及返回类型封装方法。对于静态方法,委托对象封装要调用的方法。
对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果您有一个委托对象和一组适当的参数,则可以用这些参数调用该委托。
委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;
只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。
使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给某个方法,而不必在编译时知道将调用哪个方法。
与
C 或 C++ 中的函数指针不同,委托是面向对象、类型安全的。
-----------------------------------------------------------------------------
下面说说委托的使用步骤:
看个示例啦,先看看结果:
当点击启动按钮,俩进度条将自动充满。
源码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; namespace _001_C_委托机制 { public partial class Form1 : Form { /// ---定义委托 delegate void SetProgressBarValueDelegate(int iValue); /// ---声明委托 SetProgressBarValueDelegate setProgressBarValue; public Form1() { InitializeComponent(); } ///---启动按钮事件 private void button1_Click(object sender, EventArgs e) { setProgressBarValue = new SetProgressBarValueDelegate(SetprogressBarValue1); setProgressBarValueMethod(setProgressBarValue); setProgressBarValue = new SetProgressBarValueDelegate(SetprogressBarValue2); setProgressBarValueMethod(setProgressBarValue); } ///---创建调用委托的方法 private void setProgressBarValueMethod(SetProgressBarValueDelegate setValue) { for (int i = 0; i <= 100; i++) { ///---将控制权交还给用户。 Application.DoEvents(); ///--线程睡眠 Thread.Sleep(20); ///--设置值 setValue(i); } } /// ---委托调用方法 private void SetprogressBarValue1(int iValue) { progressBar1.Value = iValue; } private void SetprogressBarValue2(int iValue) { progressBar2.Value = iValue; } } }提示,我使用了Threading.Sleep(20); 这里要加上命名空间:
using System.Threading;
相关文章推荐
- C#调用Axis2发布的带SoapHeader用户验证的WebService
- c#提供的循环
- C#泛型总结
- 用regasm注册C#的dll时报"没有注册类型"的解决方法
- c# 鼠标中的各种形状
- C# 相对路径(整合)
- c#生成图片验证码
- C# TPL学习
- VS2012如何创建模板
- C#基础加强内容图解
- C#基础加强第五天--委托,事件与反射
- C#基础加强第四天总结--正则表达式和XML
- C#基础加强第三天总结--集合与文件
- C#基础加强第二天总结--面向对象2及字符串
- C#基础加强第一天总结--面向对象1
- C#线程处理
- C#继承
- 新手浅谈C#关于abstract和interface
- 关于串口发送16进制编码及解码问题
- C#多线程中锁的使用