-- 作者: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] 上一篇 返回上一页 回到目录 回到页首 下一篇
|