在C#入门经典(第三版)的122页有一段关于委托的代码如下:namespace Ch06Ex05
{
class Program
{
delegate double ProcessDelegate(double param1,double param2); static double Multiply(double param1,double param2)
{
return param1*param2;
} static double Divide(double param1, double param2)
{
return param1 / param2;
} static void Main(string[] args)
{
ProcessDelegate process;
Console.WriteLine("Enter 2 number separated with comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0, commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
Console.WriteLine("Enter M to Multiply or D to Divide:");
input = Console.ReadLine();
if (input == "M") process = new ProcessDelegate(Multiply); else
process = new ProcessDelegate(Divide); Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadLine();
}
}
}
我将它修改为如下代码:namespace Ch06Ex05
{
class Program
{
delegate double ProcessDelegate(double param1,double param2); static double Multiply(double param1,double param2)
{
return param1*param2;
} static double Divide(double param1, double param2)
{
return param1 / param2;
} static void Main(string[] args)
{
ProcessDelegate process;
Console.WriteLine("Enter 2 number separated with comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0, commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
Console.WriteLine("Enter M to Multiply or D to Divide:");
input = Console.ReadLine();
if (input == "M")
{
process = new ProcessDelegate(Multiply);
}
else
{
if (input == "D")
{
process = new ProcessDelegate(Divide);
}
} Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadLine();
}
}
}
修改后的代码运行会报错,提示错误:使用了未赋值的局部变量“process”
那么委托变量使用前必须指定一个具体的引用函数?
{
class Program
{
delegate double ProcessDelegate(double param1,double param2); static double Multiply(double param1,double param2)
{
return param1*param2;
} static double Divide(double param1, double param2)
{
return param1 / param2;
} static void Main(string[] args)
{
ProcessDelegate process;
Console.WriteLine("Enter 2 number separated with comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0, commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
Console.WriteLine("Enter M to Multiply or D to Divide:");
input = Console.ReadLine();
if (input == "M") process = new ProcessDelegate(Multiply); else
process = new ProcessDelegate(Divide); Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadLine();
}
}
}
我将它修改为如下代码:namespace Ch06Ex05
{
class Program
{
delegate double ProcessDelegate(double param1,double param2); static double Multiply(double param1,double param2)
{
return param1*param2;
} static double Divide(double param1, double param2)
{
return param1 / param2;
} static void Main(string[] args)
{
ProcessDelegate process;
Console.WriteLine("Enter 2 number separated with comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0, commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
Console.WriteLine("Enter M to Multiply or D to Divide:");
input = Console.ReadLine();
if (input == "M")
{
process = new ProcessDelegate(Multiply);
}
else
{
if (input == "D")
{
process = new ProcessDelegate(Divide);
}
} Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadLine();
}
}
}
修改后的代码运行会报错,提示错误:使用了未赋值的局部变量“process”
那么委托变量使用前必须指定一个具体的引用函数?
试试
把以下代码:
"C#"
ProcessDelegate process;改为:
"C#"
ProcessDelegate process = null;就可以了