首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

为何委托变量中赋值时只能给static函数

2012-12-22 
为什么委托变量中赋值时只能给static函数 class Program{delegate double ProcessDelegate(double param1,

为什么委托变量中赋值时只能给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楼前辈的回答,确实不能调用。

热点排行