用例子来介绍一下:
在这个例子当中,我们将使用委托为通用类库写一个方法。ComputeIt()方法给两个变量v和T的函数的表达式求值。表达式的第一部分是v的函数,对于T的所有值求值都是一样的。表达式的第二部分是T的函数,根据T的值有不同的求值。对于T的低值它应该用一种方式求值,对于T的高值应该用另一种方法求值。
处理这种情况的一种办法是使用委托定义ComputeIt()的不同版本,一种计算T的低值,一种计算T的高值。更紧凑的办法是使用委托定义一个在各种情况下都能使用的通用版本。
ComputeIt()方法带三个参数:两个对应v和T参数的双精度值,和一个委托实例的引用和委托相关的方法用来计算表达式和T值有关的第二部分。
public static double ComputeIt(double v,double T,Equation eq)
{
return (0.5*v*v)+eq(T);
}
{
return (0.5*v*v)+eq(T);
}
Equation 委托本身定义为带一个double参数并返回一个子double值。
public delegate double Equation(double x);
下面是调用委托的代码:第一次委托和LowT()方法相关联。第二次委托和HighT()方法相关联。在两种情况下,调用ComputeIt()方法的语法都是一样的,但该方法的输出结果却不同,因为在该方法内部调用了不同的方法。
public delegate double Equation(double x);
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
double result;
Equation eqn;
//第一个委托实例
eqn=new Equation(Class1.LowT);
result=Class1.ComputeIt(100.0,4000.0,eqn);
Console.WriteLine("Result is {0}",result);
eqn=new Equation(Class1.HighT);
result=Class1.ComputeIt(100.0,4000.0,eqn);
Console.WriteLine("Result is {0}",result);
Console.ReadLine();
}
//两个方法
public static double LowT(double T)
{
return 1009.0*T;
}
public static double HighT(double T)
{
return (1009.0*T)+(0.1*T*T);
}
public static double ComputeIt(double v,double T,Equation eq)
{
return (0.5*v*v)+eq(T);
}
}
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
double result;
Equation eqn;
//第一个委托实例
eqn=new Equation(Class1.LowT);
result=Class1.ComputeIt(100.0,4000.0,eqn);
Console.WriteLine("Result is {0}",result);
eqn=new Equation(Class1.HighT);
result=Class1.ComputeIt(100.0,4000.0,eqn);
Console.WriteLine("Result is {0}",result);
Console.ReadLine();
}
//两个方法
public static double LowT(double T)
{
return 1009.0*T;
}
public static double HighT(double T)
{
return (1009.0*T)+(0.1*T*T);
}
public static double ComputeIt(double v,double T,Equation eq)
{
return (0.5*v*v)+eq(T);
}
}