c# 委托的理解

委托就好比劳务公司,就是帮别人干活的。

他的关键字delegate ,写上这个东西就好比你建立了一所劳务公司,然而你建立的这个公司在哪可以看到呢?这时就需要在delegate之前加访问修饰符的类型。那这个公司的职责(返回值类型)是啥呢?那么就需要在delegate之后加上返回值类型。一个公司肯定需要一个名字(DelegateName)对吧而且这个公司生产产品肯定需要原料(参数)对吧。

//例如
public delegate int DelegateName(int a,int b)

委托的核心是什么?——委托就相当于函数指针(万物皆地址)函数当成变量;

下面我就举一个加法的例子来演示一下用委托和不用委托的区别

using System.Windows.Forms;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        Calculate c1 = new Calculate();
        public Form1()
        {
            InitializeComponent();
            c1.Add(2, 3);//这是不用委托
        }
    }
    public class Calculate
    {
        public int Add(int a,int b)
        {
            int c = a + b;
            return c;
        }
    }
}
using System.Windows.Forms;
public delegate int myDelegate(int a, int b);//这是用委托,只要是参数类型和数量的对应且返回值类型相同的都可以通过这个公司委托办事儿。
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        Calculate c1 = new Calculate();
        public Form1()
        {
            InitializeComponent();
            myDelegate p1 = c1.Add;//这里就相当于公司派出了一个叫p1的人,来接受c1.Add委托办的事儿
            p1(2, 3);
        }
    }
    public class Calculate
    {
        public int Add(int a,int b)
        {
            int c = a + b;
            return c;
        }
    }
}

总而言之就是,你这件事儿不想做了,只要咱俩的参数个数和类型相同,返回值类型相同,那么你就可以把这件事儿委托给我们劳务公司,我们派人来代替你做这件事。

那么如何理解把函数当成变量呢?请看下面的例子

using System.Windows.Forms;
public delegate int myDelegate();
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        Calculate c1 = new Calculate();
        public Form1()
        {
            InitializeComponent();
            myDelegate p1 = c1.CreatVal;
            c1.Sub(p1);
        }
    }
    public class Calculate
    {
        public int CreatVal()
        {
            int num = 1;
            return num;
        }
        public int Sub(myDelegate f1)
        {
            int a = 8 - f1();
            return a;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值