您的位置:首页 > 编程语言 > C#

C#之委托

2015-07-19 23:23 435 查看
------------------------- 关于委托的一些事儿 -------------------------------------

委托 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: