[叩响C#之门]写给初学者:委托的概念
2010-09-30 20:56:41 来源:WEB开发网下面我们利用委托的通用性设计一个通用的求定积分的函数。
数得形式传递给定积分函数,所以需要利用委托实现。
请新建一个名为“Integral”的项目,然后添加如下代码。
试一试:求定积分
//被积函数
static double F1(double x)
{
return 2*x+1;
}
//被积函数
static double F2(double x)
{
return x * x ;
}
//被积函数的委托
delegate double Integrand(double x);
//函数:定积分
static double DefiniteIntegrate(double a, double b, Integrand f)
{
const int sect = 1000; //分割数目
double delta = (b - a) / sect;
double area = 0;
for (int i = 1; i <= 1000; i++)
{
area += delta * f(a + i * delta);
}
return area;
}
//进行定积分运算
static void Main(string[] args)
{
Integrand f1 = new Integrand(F1);
Integrand f2 = new Integrand(F2);
double result1 = DefiniteIntegrate(1, 5, f1);
double result2 = DefiniteIntegrate(0, 1, f2);
Console.WriteLine("result1 = {0}", result1);
Console.WriteLine("result2 = {0}", result2);
}
只需传给定积分函数DefiniteIntegrate()相应的被积函数,就可计算出任何函数的定积分。
综上所述,利用委托可以实现以函数为参数,提高程序的通用性。委托用关键字的delegate声明,实际上创建一种委托相当于创建一个从System.Delegate派生出来的类,类中有一个调用列表,列表中包含着被委托函数的引用。与C++的函数指针相比,委托是一种类型安全的方式。
- ››初学者对于三层框架的理解
- ››写给初学者:多线程系列( 十)——死锁(Deadlock)...
- ››写给初学者:多线程系列( 十一)——线程池(Thread...
- ››写给初学者:多线程系列(一)——线程的概念
- ››写给初学者:多线程系列(二)—— Thread类(线程类...
- ››写给初学者:多线程系列(三)——线程的优先级
- ››写给初学者:多线程系列(四)——线程的插入 Join(...
- ››写给初学者:多线程系列(五)——线程的状态
- ››写给初学者:多线程系列(六)——线程同步的概念
- ››写给初学者:多线程系列(七)——互锁(Interlocke...
- ››写给初学者:多线程系列(八)——管程类(Monitor类...
- ››写给初学者:多线程系列( 九)——互斥体(Mutex类...
更多精彩
赞助商链接