委托变量使用前是不是必须指定引用函数?

iloveyoubaby 2011-07-06 12:48:19
在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”
那么委托变量使用前必须指定一个具体的引用函数?
...全文
59 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanran_hill 2011-07-06
  • 打赏
  • 举报
回复
局部变量都必须有初值,否则编译时就无法通过检查.
把以下代码:
[code=HTML]"C#"
ProcessDelegate process;
[/Code]
改为:
[code=HTML]"C#"
ProcessDelegate process = null;
[/Code]
就可以了
xuexiaodong2009 2011-07-06
  • 打赏
  • 举报
回复
在input 不是M",D是未赋值!!
xuexiaodong2009 2011-07-06
  • 打赏
  • 举报
回复
ProcessDelegate process=null;
试试
白鸽 2011-07-06
  • 打赏
  • 举报
回复

ProcessDelegate? process

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧