“委托”小议

什么是委托?

答:C#中的委托相当于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.Windows.Forms;
using System.Threading;

namespace WT
{
    public partial class Form1 : Form
    {
        delegate void SetProgressBarValueDelegate(int value);   //定义委托
        SetProgressBarValueDelegate setProgressBarValueDelegate; //声明委托
        public Form1()
        {
            InitializeComponent();
        }

        private void btn_Start_Click(object sender, EventArgs e)
        {
            setProgressBarValueDelegate = new SetProgressBarValueDelegate(progressBar1);//实例化委托
            progressBar(setProgressBarValueDelegate);       //委托调用方法
            setProgressBarValueDelegate = new SetProgressBarValueDelegate(progressBar2);
            progressBar(setProgressBarValueDelegate);
        }
        private void progressBar(SetProgressBarValueDelegate setValue)//传递委托的方法
        {
            for (int i = 0; i < 100;i++ )
            {
                Application.DoEvents();
                Thread.Sleep(50);
                setValue(i);
            }
        }
        private  void progressBar1(int value)   //被委托的方法
        {
            pgb_bar1.Value = value;
        }
        private void progressBar2(int value)    //被委托的方法
        {
            pgb_bar2.Value = value;
        }
    }
}

posted @ 2013-04-20 00:37  在路上的人  阅读(117)  评论(0)    收藏  举报