标题:关于C#委托的经典实例
只看楼主
RayminCheung
Rank: 1
来 自:大连
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-9
 问题点数:0 回复次数:8 
关于C#委托的经典实例
委托在C#编程中所占的地位是毋庸置疑的,委托概念也是区别于C/C++的重要方面,下面让我们以一个经典实例对委托做一个了解。

        private delegate void WriteTextBox(char ch);//定义委托
        private WriteTextBox writeTextBox;//声明

        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
            {
                groupBox2.Text = "运行中...";
                groupBox2.Refresh();
                richTextBox1.Clear();
                richTextBox1.Refresh();
                writeTextBox = new WriteTextBox(WriTextBox1);//实例化委托
                WriTxt(writeTextBox);//作为参数
                groupBox2.Text = "任务1";
                textBox1.Focus();
                textBox1.SelectAll();
 
            }
            else richTextBox1.Clear();
            if (checkBox2.Checked == true)
            {
                //groupBox2.Refresh();
                groupBox3.Text = "运行中...";
                groupBox3.Refresh();
                richTextBox2.Clear();
                richTextBox2.Refresh();
                writeTextBox = new WriteTextBox(WriTextBox2);//实例化委托
                WriTxt(writeTextBox);//作为参书
                groupBox3.Text = "任务2";
                textBox1.Focus();
                textBox1.SelectAll();

            }
            else richTextBox2.Clear();
            
        }
        private void WriTxt(WriteTextBox wMethod)
        {
            string sta = textBox1.Text;
            for (int i = 0; i < sta.Length; i++)
            {
                wMethod(sta[i]);//使用委托
                DateTime now = DateTime.Now;
                while (now.AddSeconds(0.1) > DateTime.Now) { }
            }
        }
        private void WriTextBox1(char ch)
        {
            richTextBox1.AppendText(ch +"");
        }
        private void WriTextBox2(char ch)
        {
            richTextBox2.AppendText(ch+"" );
        }
 
   
    委托的使用要先定义,然后声明,然后实例化,然后作为参书进行传递,最后才能使用。
搜索更多相关主题的帖子: 经典 void private 
2012-03-10 20:10
wang_haodong
Rank: 2
等 级:论坛游民
帖 子:4
专家分:14
注 册:2012-3-24
得分:0 
学习学习!
2012-03-24 23:29
limaojie138
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-1-8
得分:0 
真是不错,谢谢楼主
2012-03-25 17:40
chris_kscn
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-21
得分:0 
初步用到委托的是在多线程调用主线程空间的时候 通过INVOKE和委托来实现。
但是委托的更多作用不甚了解,楼主能列举委托的多种用途吗
2012-03-28 14:30
linruihan
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2010-4-10
得分:0 
能否上传文件, 还是有些搞不懂,首先,比如,这个程序想实现什么样的功能,没有这些说明,很难看明白在写什么?
(得声明先,我是入门者)
2012-04-02 21:20
linruihan
Rank: 2
等 级:论坛游民
帖 子:14
专家分:10
注 册:2010-4-10
得分:0 
在其它网站看到同一个实例,上边有使用委托以前的代码对比,以更好地说明委托的作用,可以参考一下,我认为
程序代码:
namespace ProcessMethodCall
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (checkBox1.Checked == true)
            {
                groupBox2.Text = "运行中……";
                groupBox2.Refresh();
                textBox1.Clear();
                textBox1.Refresh();
                this.writeTextBox1();    //调用方法writeTextBox1()向文本区①写入文字
                groupBox2.Text = "任务1";
                textBox3.Focus();
                textBox3.SelectAll();
            }
            if (checkBox2.Checked == true)
            {
                groupBox2.Refresh();
                groupBox3.Text = "运行中……";
                groupBox3.Refresh();
                textBox2.Clear();
                textBox2.Refresh();
                this.writeTextBox2();    //调用方法writeTextBox2()向文本区②写入文字
                groupBox3.Text = "任务2";
                textBox3.Focus();
                textBox3.SelectAll();
            }
        }
        //写文本区①的方法
        private void writeTextBox1()
        {
            string strdata = textBox3.Text;
            for (int i = 0; i < strdata.Length; i++)
            {
                textBox1.AppendText(strdata[i] + "\r");
                //间歇延时
                DateTime now = DateTime.Now;
                while (now.AddSeconds(1) > DateTime.Now) { }
            }
        }
        //写文本区②的方法
        private void writeTextBox2()
        {
            string strdata = textBox3.Text;
            for (int i = 0; i < strdata.Length; i++)
            {
                textBox2.AppendText(strdata[i] + "\r");
                //间歇延时
                DateTime now = DateTime.Now;
                while (now.AddSeconds(1) > DateTime.Now) { }
            }
        }
    }
}
2012-04-02 21:38
ll1027225399
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-4-6
得分:0 
天呐,莴苣了
2012-04-06 20:24
yhj8848
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2011-12-18
得分:0 
委托,我了解一点皮毛,其实委托在多线程和事件才真正体现出它的优越性
2012-04-21 10:01
bccnsir
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2012-5-14
得分:0 
委托就是事件发生者和事件响应者之间的媒介.
windowns系统是基于事件和消息机制的.与c++相比,委托在csharp中被进一步封装而已.
2012-05-14 12:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-362765-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058264 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved