1.理解委托(Delegate)
将一个函数作为另一个函数的参数
定义时保持与想代替方法的参数返回类型一样
delegate void AnimalPlay(string name);
static void DogAct(string name)
委托对象需要申明等于哪一个方法
AnimalPlay deleDogPlay = new AnimalPlay(DogAct);
AnimalPlay deleDogPlay = DogAct;
deleDogPlay("Snoopy1");
完整程序
delegate void AnimalPlay(string name);
internal class Program
{
static void RunCircus(AnimalPlay animalPlay,string name)
{
animalPlay(name);
}
static void Main(string[] args)
{
//AnimalPlay deleDogPlay = new AnimalPlay(DogAct);
AnimalPlay deleDogPlay = DogAct;
deleDogPlay("Snoopy1");
RunCircus(deleDogPlay, "Snoopy");
RunCircus(LionAct, "Tiger");
}
static void DogAct(string name)
{
Console.WriteLine("Hello,I'm"+name+"!");
Console.WriteLine(@"
Wone
............");
}
static void CatAct(string name)
{
Console.WriteLine("Hello,I'm" + name + "!");
Console.WriteLine(@"
Meow
............");
}
static void LionAct(string name)
{
Console.WriteLine("Hello,I'm" + name + "!");
Console.WriteLine(@"
Oi
............");
}
}
2.程序设计
定积分实例
internal class Program
{
//被积函数
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 = F2;
double result1 = DefiniteIntegrate(1, 5, f1);
double result2 = DefiniteIntegrate(1, 5, F1);
double result3 = DefiniteIntegrate(0, 1, f2);
double result4 = DefiniteIntegrate(0, 1, F2);
Console.WriteLine("result1 = {0}", result1);
Console.WriteLine("result2 = {0}", result2);
Console.WriteLine("result3 = {0}", result3);
Console.WriteLine("result4 = {0}", result4);
Console.WriteLine("{0},\n{1},\n{2},\n{3}", result1,result2,result3,result4);
}
}