c#学习笔记之八 函数的代表delegate的用法:c# 求 三角函数 指数函数 积分

在实际的开发中,要用到很多的函数。而针对这些函数的一些共性的操作,也可以形成一个函数。因为是共性的操作,所以不需要具体地针对每个函数都定义,而只要一个函数的代表就可以了。比如,求积分操作, 它的方法对所有函数都是适用的。

使用了函数的代表delegate关键词以后,就生成了一个函数代表类。类名是我们自定义的。这个类的声明形式不同于一般的class classname{}的形式。我想,是因为要和函数的定义形式一致,更直观地体现这个函数代表类的类型。一个函数的类型包括返回值类型和参数类型,这就是一个函数的全部类型。都直观体现在函数代表的声明中,如下所示:

函数代表类的声明:

delegate double FuctionDelegate(double x);

使用函数代表类:

FunctionDelegate fd = new FunctionDelegate(FunctionName);//生成一个函数代表对象

熟悉C指针的都知道,FunctionDelegate对象包含的应该是函数的指针。所以在生成函数代表对象的时候,参数不是定义时括号里面的参数,而是函数的名字。这样就把函数的指针传递给了fd对象。这是很别扭的地方,新建类的时候括号里的参数竟然和定义时括号里的参数不一致。希望C#在以后可以改进。但是,如果你知道FunctionDelegate类在声明的时候,那个形式,只是为了表明函数的类型,那么新建的时候的形式,也是可以勉强理解的。当然,传递指针的函数的类型要和定义FunctionDelegate时候的函数类型是一致,这自不必说。

下面的代码就是我使用函数代表类对若干函数求积分,对积分操作函数只定义一次就可以了。

/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2016/11/8
 * Time: 11:04
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;

namespace IntegralUseDelegate
{
delegate double Function(double x);
class F            {
	public static double Quad(Function f,double lower,double upper)
		{
		double precision;
		precision = 0.0001;
		int n;
		n = Convert.ToInt32( (upper- lower)/precision );
		
		double sum;
		sum = 0;
		int i;
		for(i=0;i<n;i++)
			sum += f( lower + precision*i )*precision;
		return sum;
		 }
                     }

class Program  {
	public static void Main(string[] args)
		{
		double q1,q2;
		q1 = F.Quad(Math.Sin,0,Math.PI/2);
		q2 = F.Quad(Math.Log10,1,1000);
		Console.WriteLine(q1);
		Console.WriteLine(q2);
		Console.Write("Press any key to continue . . . ");
		Console.ReadKey(true);
		 }
			     }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值