C#学习笔记——委托机制

简介:
什么是委托?
委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成。委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数
委托具有以下特点:
1)委托类似于 C++ 函数指针,但它是类型安全的。
2)委托允许将方法作为参数进行传递。
3)委托可用于定义回调方法。
4)委托可以链接在一起;例如,可以对一个事件调用多个方法。
5)方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
6)C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

定义和使用委托分四个步骤:
1、委托定义 2、委托声明。3、委托实例化。4、委托调用。
示例代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//引入命名空间
using System.Threading;
 
namespace CSharp_001_委托机制
{
    public partial class frmMain : Form
    {
        //定义委托
        private delegate void SetValueDelegate(int value);
        //声明委托
        SetValueDelegate setValue;
 
        public frmMain()
        {
            InitializeComponent();
        }
 
        private void btnStart_Click(object sender, EventArgs e)
        {
            //实例化委托
            setValue = new SetValueDelegate(SetProgreesBarValue);
            SetProgreesBarValueMethod(setValue);
            //实例化委托
            setValue = new SetValueDelegate(SetLabTextValue);
            SetProgreesBarValueMethod(setValue);
        }
 
        void SetProgreesBarValueMethod(SetValueDelegate SetValue)
        {
            for (int i = 0; i <= 100; i++)
            {
                Application.DoEvents();
                Thread.Sleep(50);
                SetValue(i);
            }
        }
        void SetProgreesBarValue(int value)
        {
            pgProgressBar.Value = value;
        }
        void SetLabTextValue(int value)
        {
            labText.Text = value.ToString();
        }
    }
}

示例结果:

image

作者: 韩兆新
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:  [01]C#语言基础
标签:  C#学习笔记

本文转自韩兆新博客博客园博客,原文链接:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/17/2914439.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
C#
halcon联合c#、WPF学习笔记三(dispatcherTimer实时相机显示)
halcon联合c#、WPF学习笔记三(dispatcherTimer实时相机显示)
59 1
halcon联合c#、WPF学习笔记三(dispatcherTimer实时相机显示)
|
3月前
|
C#
halcon联合c#、WPF学习笔记二(简单案例)
halcon联合c#、WPF学习笔记二(简单案例)
94 0
|
3月前
|
C# C++
halcon联合c#、WPF学习笔记一(WPF配置halcon)
halcon联合c#、WPF学习笔记一(WPF配置halcon)
115 1
|
C# C语言
C#学习笔记22: 面向对象编程入门精讲(下)
C#学习笔记22: 面向对象编程入门精讲
C#学习笔记22: 面向对象编程入门精讲(下)
c#编程:事件delegate学习笔记-3
c#编程:事件delegate学习笔记-3
|
缓存 开发框架 运维
C#好代码学习笔记(1):文件操作、 读取文件、Debug/Trace类、Conditional条件编译、CLS
C#好代码学习笔记(1):文件操作、 读取文件、Debug/Trace类、Conditional条件编译、CLS
196 0
|
开发框架 并行计算 .NET
改善C#程序的157个建议——建议84学习笔记:使用PLINQ
改善C#程序的157个建议——建议84学习笔记:使用PLINQ
101 0
|
编译器 C#
改善C#程序的157建议——建议42学习笔记:使用泛型参数兼容泛型接口的不可变性。
改善C#程序的157建议——建议42学习笔记:使用泛型参数兼容泛型接口的不可变性。
101 0
|
C#
改善C#程序157个建议——建议37学习笔记:使用Lambda表达式代替方法和匿名方法
改善C#程序157个建议——建议37学习笔记:使用Lambda表达式代替方法和匿名方法
93 0