以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  C#快餐-12  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=11726)


--  作者:admin
--  发布时间:11/9/2004 2:25:00 AM

--  C#快餐-12


发信人: nice (春天), 信区: DotNET        
标  题: C#快餐-12
发信站: BBS 水木清华站 (Thu Jul 26 02:15:54 2001)

Lesson 12.  Delegates.


  Let's consider a problem of calculating a numerical integral. We would like  
to have a method which takes different functions and outputs corresponding  
values of the integral of these functions. In C++ the code would look like  
this:

#include<iostream>
using namespace std;
//calculate the integral of f(x) between x=a and x=b by splitting the interv
al in step_number steps

double integral(double (*f)(double x),double a, double b,int step_number)
{
    double sum=0;
    double step_size=(b-a)/step_number;
    for(int i=1;i<=step_number;i++)
    sum=sum+f(a+i*step_size)*step_size; //divide the area under f(x) into st
ep_number rectangles and sum their areas
    return sum;

}
//simple functions to be integrated
double f1( double x)
{
    return x*x;
}

double f2(double x)
{
    return x*x*x;
}

void main()
{//output the value of the integral.
    cout<<integral(f1,1,10,20)<<endl;
}

How would we do the same thing in C#? The code bellow is almost exactly the  
same. The main difference is that method integral takes a delegate instead  
of a pointer to a function. An instance of a delegate new Integral.
Function(f1) must be passed to the method integral.

using System;
//calculate the integral of f(x) between x=a and x=b by splitting the interv
al in step_number steps
class Integral
{
    public delegate double Function(double x); //declare a delegate that tak
es a     double and returns a double
    public static double integral(Function f,double a, double b,int step_num
ber)
    {
         double sum=0;
          double step_size=(b-a)/step_number;
         for(int i=1;i<=step_number;i++)
        sum=sum+f(a+i*step_size)*step_size; //divide the area under f(x) int
o            step_number rectangles and sum their areas
          return sum;
    }
}
class Test
{
    //simple functions to be integrated
    public static double f1( double x)
{
    return x*x;
}
public static double f2(double x)
{
    return x*x*x;
}
public static void Main()
{//output the value of the integral.
    Console.WriteLine(Integral.integral(new Integral.Function(f1),1,10,20));

}
}

--

※ 修改:·walts 於 Jul 26 10:29:00 修改本文·[FROM: 166.111.142.118]
※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.176.234]
上一篇
返回上一页
回到目录
回到页首
下一篇



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
141.113ms