欢迎进入这篇文章,文章内容为学习C#过程中做的笔记,可能有些内容的逻辑衔接不是很连贯,但还是决定分享出来,由衷的希望可以帮助到你。
笔记内容会持续更新~~
本章介绍C#中的委托,本章难度较大...
委托
C#中的委托是C语言、C++中函数指针的升级版。接下来介绍一个概念——一切皆地址。因为变量(数据)是以某个地址为起点的一段内存中所存储的值。函数(算法)是以某个地址为起点的一组机器语言指令。也就是说,无论是数据还是算法,都是保存在内存当中的,变量用来寻找数据的地址,函数用来寻找算法的地址。接下来先通过两个简单的例子来介绍下委托的简单使用。
Action委托
Func委托
这里Func的泛型有很多种,Add方法和Sub方法只有两个参数,所以选择带有两个参数的。尖括号里写的是目标方法的返回类型,当尖括号内有多个类型时,最后一个是返回类型,前面的才是参数类型。
Aciton委托和Func委托是微软为我们声明好的委托,接下来介绍如何自己声明委托。委托是一种类,类是数据类型所以委托也是一种数据类型。所以委托也可以用来声明变量、创建实例。下面来尝试自己声明委托。
声明委托
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ConsoleApp1
{
public delegate double Cal(double x, double y);
internal class Program
{
static void Main(string[] args)
{
Calculator calculator = new Calculator();
Cal cal1 = new Cal(calculator.Add);
Cal cal2 = new Cal(calculator.Sub);
Cal cal3 = new Cal(calculator.Mul);
Cal cal4 = new Cal(calculator.Div);
double a = 100;
double b = 200;
double c = 0;
c = cal1.Invoke(a, b);
Console.WriteLine(c);
c = cal2.Invoke(a, b);
Console.WriteLine(c);
c = cal3.Invoke(a, b);
Console.WriteLine(c);
c = cal4.Invoke(a, b);
Console.WriteLine(c