为什么委托变量中赋值时只能给static函数
class Program
{
delegate double ProcessDelegate(double param1, double param2);//委托的声明和函数的声明是相同的,不同的是前面要加委托的关键字DELEGATE
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;
process = null;
Console.WriteLine("Enter 2 numebles separated with a comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
Console.WriteLine("The position is {0}",commaPos );
double param1 = Convert.ToDouble(input.Substring(0, commaPos)) ;
double param2 = Convert.ToDouble(input.Substring(commaPos + 1, input.Length - commaPos - 1)) ;
Console.WriteLine("param1 :{0} \n param2 :{1}",param1 ,param2 );
Console.WriteLine("Enter M to Multiply or D to Divide");
input = Console.ReadLine();
if (input == "M")
{
process = new ProcessDelegate(Multiply );
}
else //注意这里ELSE是不能去掉的,因为如果input='a'的话,那么process就是一个为负值了。
if(input =="D")
{
process = new ProcessDelegate(Divide);
}
Console.WriteLine("result is {0}", process(param1, param2)); Console.ReadKey();
}
}
为甚去掉Multiply函数前面的 static ,这句报错,而Console.WriteLine("如果直接调用了:{0}" ,Multiply(21.5,21.6));
这个不报错,在c语言中为什么可以再后面直接 调用?
[最优解释]
去掉也可以,得这么写:
process = new ProcessDelegate(new Program().Multiply);
你基本语法还不会啊,走路没有学会不要学跑,基础知识要学扎实才行。看你的注释理解,很多都是错的。
[其他解释]
上述代码中,Multiply要定义为public。
另外,如果不定义为static
Console.WriteLine("如果直接调用了:{0}" ,Multiply(21.5,21.6));
这个也是会报错的。因为Main是一个静态方法。
[其他解释]
1楼前辈,谢谢你的回复,我是一个刚工作几个月的学生,所以很多东西都不规范,以后一定多注意。
然后CSDN 最近才开始研究论坛和博客。百度了解了一下发帖注意的素养和规范,这是我的第一次发帖,谢谢你的回答,但是还是有点不明白,new Program().Multiply为什么要新实例一个对象?
[其他解释]
谢谢2楼前辈的回答,确实不能调用。