目录
了解委托
委托使用的基本步骤
声明委托(定义一个函数的原型:返回值 + 参数类型和个数)
根据委托定义的函数原型编写需要的方法
创建委托对象,关联“具体方法”
通过委托调用方法,而不是直接使用方法
委托对象所关联的方法可以动态变化
委托应用场景
了解委托
- 委托是一种全新的面向对象的特性,运行在.Net平台
- 基于委托,开发事件驱动程序变得非常简单
- 使用委托可以大大简化多线程编程难点
委托使用的基本步骤
声明委托(定义一个函数的原型:返回值 + 参数类型和个数)
根据委托定义的函数原型编写需要的方法
创建委托对象,关联“具体方法”
通过委托调用方法,而不是直接使用方法
委托对象所关联的方法可以动态变化
委托对象的声明一般是放在类外面。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DelegateDemo
{
internal class Program
{
static void Main(string[] args)
{
//[3]创建委托对象,关联"具体方法"
CalculatorDelegate objCal = new CalculatorDelegate(Add);
//[4]通过委托去调用方法,而不是直接使用方法
int result = objCal(10, 20);
Console.WriteLine("10 + 20 = {0}", result);
objCal -= Add; //断开当前委托对象关联的方法
objCal += Sub; //重新指向一个新的方法(减法)
result = objCal(10, 20); //重新使用委托对象,完成减法功能
Console.WriteLine("10 - 20 = {0}", result);
Console.ReadLine();
}
//[2]根据委托对象创建一个"具体方法"实现加法功能
static int Add(int a, int b)
{
return a + b;
}
//[2]根据委托对象创建一个"具体方法"实现减法功能
static int Sub(int a, int b)
{
return a - b;
}
}
//[1]声明委托(定义一个函数的原型:返回值 + 参数返回个数和类型)
public delegate int CalculatorDelegate(int a, int b);
}
委托应用场景
利用委托实现主窗体和从窗体之间传值
主窗体FrmMain.cs
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;
namespace DelegateDemo3
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
FrmOther objFrm = new FrmOther();
//将从窗体的委托变量和主窗体对应的方法关联
objFrm.msgSender = this.Receiver;
objFrm.Show();
}
/// <summary>
/// 接收委托传递的信息
/// </summary>
/// <param name="counter"></param>
public void Receiver(string counter)
{
this.lblShow.Text = counter;
}
}
//委托声明
public delegate void ShowCounter(string counter);
}
从窗体FrmOther.cs
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;
namespace DelegateDemo3
{
public partial class FrmOther : Form
{
public FrmOther()
{
InitializeComponent();
}
//根据委托创建委托对象
public ShowCounter msgSender;
//计数
private int counter = 0;
private void btnClick_Click(object sender, EventArgs e)
{
counter++;
if (msgSender != null)
{
msgSender(counter.ToString());
}
}
}
}