中文版131页的那个例子,源码是
class Program
{
delegate double ProcessDelegate(double param1, double param2);
static double Mut(double param1, double param2)
{
double sum = 0.00;
sum = param1 * param2;
return sum;
}
static double Div(double param1, double param2)
{
double sum = 0.00;
sum = param1 / param2;
return sum;
}
static void Main(string[] args)
{
ProcessDelegate process;
Console.WriteLine("Type in 2 double numbers split by \",\":");
string inputNum = Console.ReadLine();
int commaPos = inputNum.IndexOf(",");
double param1 = Convert.ToDouble(inputNum.Substring(0,commaPos));
double param2 = Convert.ToDouble(inputNum.Substring(commaPos+1,inputNum.Length-commaPos-1));
Console.WriteLine("Press \"M\" to Mut them, or press \"D\" to Div them:");
switch (Console.ReadLine())
{
case "M":
process = new ProcessDelegate(Mut);
break;
case "D":
process = new ProcessDelegate(Div);
break;
default:
break;
}
Console.WriteLine("Results of the opration is : {0}", process(param1, param2));
Console.ReadKey();
}
}
但是这个代码会报错,说是使用了未赋值的局部变量process,并且process也会标记为红色波浪线。
原因是process这个变量(这里指向的是一个方法)在Main方法中虽然已经定义为委托,但是没有被初始化!
前面变量一章已经强调过这个问题,变量要想被使用,除了要声明之外,还要初始化。所以必须要给process一个初始的值,哪怕是null
所以在ProcessDelegate process;这一行的后面加一个初始化为null即可:process=null;
PS:这翻译的人真的有玩过这些实例?