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;
///委托是对方法的类型的抽象
///方法的类型是由返回值、形参个数及类型定义的
///所以委托也通过返回值、形参个数及类型定义了不同类型的方法
///因为委托是一种类型,也就是类,所以在使用时需要实例化。
///委托类型的实例对象的应用很灵活,跟普通类的实例对象使用方式相同
///可以作为另外一个方法的空壳使用,也可以作为其他方法的参数使用
///之所以称之为方法的空壳,是因为该实例对象不具有真实的业务逻辑能力,
///仅仅是中间的一个经手人而已。如果老师让小明去打水,小明是瘸子,走动不便,但小明
///有个好朋友小红,小明就让小红去打水,最终水由小红打回来了。
///这里,相当于小明就是委托。
namespace delegate_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 定义了一种方法的类型,有int返回值
/// 有两个形参,都为int
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public delegate int culculateDelegate(int x, int y);
private void Form1_Load(object sender, EventArgs e)
{
culculateDelegate cd = Added;
MessageBox.Show(dele(cd, 3, 5).ToString());
}
/// <summary>
/// 这个方法满足委托所定义的方法的类型
/// 他是这样一种类型的方法,有一个int的返回值,有两个形参,都是int型的
/// 这里,方法的类型,由返回值、形参个数和形参类型共同决定。
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <returns></returns>
private int Added(int a, int b)
{
return a + b;
}
/// <summary>
/// 该方法有三个形参,类型分别为1个委托型(该委托型方法的类型是2个int形参,一个int返回值),2个int
/// </summary>
/// <param name="cd"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private int dele(culculateDelegate cd, int x, int y)
{
return cd(x, y);
}
}
}