委托

什么是委托
委托(delegate)是函数指针的“升级版”,字面意思是这有一件事件我自己不亲自做,委任给别人做,也就是间接的去做。
函数指针是C/C++中的概念
一切皆地址
变量(数据)是以某个地址为起点的一段内存中所储的值。
函数(算法)是以某个地址为起点的一段内存中所存储的一组机器语言指令。

变量也是就数据存在内存中,这个变量保存这个变量的地址,通过这个地址去找这个数据,这个数据的大小是这个变量的类型决定的。函数保存的是一组机器语言的指令地址,通过这个地址找到这一组机器语言指令,然后cpu一句一句的去执行这些指令,然后完成算法。所以无论数据还是算法都是保存在内存中,而变量和函数保存的是地址,变量保存是寻找数据的地址,函数保存的是算法的地址。

直接调用与间接调用
直接调用:通过函数名来调用函数,cpu通过函数直接获得函数所在地址并开始执行—>返回
间接调用:通过函数指针来调用函数,cpu通过读取函数指针存储的值获得函数所在地址并开始执行—>返回

java是从C/C++语言发展而来的,为了提高程序的安全性,java语言禁止程序员直接访问内存地址,也就是把指针函数舍弃掉了,没有了指钍程序员就是不能直接访问地址。C#也是从C/C++语言发展而来的,但是C#的通过委托这种数据类型保留了指钍这部分功能

委托的简单使用
Action委托
Func委托

自定义委托

nameespace DelegateExample
{
	public delegate double Calc(double x,doule y); 
//修饰访问符+声明委托关键字+返回值类型+名字(传值类型、个数)

	class Program{
		static void Main(string[] args){
			Calcuator calculator = new Calcuator();
			Calc calc1 = new Calc(calculator.Add);
			Calc calc2 = new Calc(calculator.Sub);
			Calc calc3 = new Calc(calculator.Sub);

			double a = 100;
			double b = 100;
			double c = 0;
			c = calc1(a,b);
			Console.WriteLine(c);
			c = calc2(a,b);
			Console.WriteLine(c);
			c = calc3(a,b);
			Console.WriteLine(c);
			
		}	
	}
	class Calcuator {
		public double Add(double x,double y){
			return x+y;
		}
		public double Sub(double x,double y){
			return x-y;
		}
		public double Sub(double x,double y){
			return x*y;
		}
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值