标签:
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);
        }
    }
}
标签:
原文地址:http://www.cnblogs.com/matthew-ying/p/4350335.html