代码如下:
          class Program
    {
     public  long Multiply(long nbr1,long nbr2)
     {
      return (nbr1*nbr2);
     }   static void Main(string[] args)
        
   {
    long x=1234;
    long y=5678;
    long result;
    
    result=Multiply(x,y);
    Console.WriteLine("x*y:{0} *{1}={2}",x,y,result);
        }
    }
      出现错误:非静态的方法要求对象引用,我不明白的是Multiply方法和它的调用都是处于同一个类program中的,为什么会出错呢?为什么要把Multiply方法声明为静态的才能直接调用呢?因为在同一个类里面吗?

解决方案 »

  1.   

    public static long Multiply(long nbr1,long nbr2)
      {
      return (nbr1*nbr2);
      }
      

  2.   


      我知道这样就不会出错了,可是我不知道为什么,Multiply方法和调用它的Main方法不是在同一个类里面吗?为什么在它的前面要加static  ?
      

  3.   

    静态方法和属性只能访问静态字段和静态事件
    public static long Multiply(long nbr1,long nbr2)
      {
      return (nbr1*nbr2);
      }
      

  4.   

    static 是直接可以调用的  其他的必须实例化一下  才能引用  。他们的存储位置是不一样的 
      

  5.   


     你的意思是说因为Main方法是静态的,所以要被其调用的Multiply方法也必须是静态的,又因为他们在同一个类中所以可以直接使用Multiply方法?
      

  6.   


      可是Multiply方法和调用它的Main方法是同一类program中的呀,这样也不能直接调用?还是因为Main方法是静态的,所以Multiply方法也必须是静态的?
      

  7.   

    因为Main方法是静态的,所以Multiply方法也必须是静态的
    看看下面的代码,和你原来的代码比较一下using System;class Program
    {
        public long Multiply(long nbr1, long nbr2)
        {
            return (nbr1 * nbr2);
        }    static void Main(string[] args)
        {
            long x = 1234;
            long y = 5678;
            long result;        Program p = new Program();
            result = p.Multiply(x, y);
            Console.WriteLine("x*y:{0} *{1}={2}", x, y, result);
        }
    }
      

  8.   

    搞明白了,静态方法不能调用实例方法,除非显式给它提供了类的实例,哎。都怪自己看msdn看的不仔细,谢谢大家的回答!