C#对象引用问题

时间:2011-06-03 14:51:16

标签: c#

我正在创建一个非常基本的程序,它有一个填充数组的方法,但是我收到一个我不明白的错误。我是一名试图适应C#和.NET的Java程序员。任何帮助都会很棒。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;

namespace TestThreads
{
    class Program
    {
        static void Main(string[] args)
        {
             int[]  empty = new int[50001];
             int[] filled = new int[50001];

            filled = compute(empty); //error occurs here

            Console.ReadLine();
        }

        public int[] compute(int[] inArray)
        {
            for (int i = 0; i < inArray.Length; i++)
            {
                inArray[i] = i << 2;
            }

            return inArray;
        }
    }
}

错误讯息:

错误1 非静态字段,方法或属性需要对象引用'TestThreads.Program.compute(int [])'C:\ Users \ hunter.mcmillen \ Desktop \ TestProcessSplitting \ TestProcessSplitting \ Program.cs 17 22 TestThreads

谢谢, 亨特

6 个答案:

答案 0 :(得分:6)

计算方法应该是静态的。

public static int[] compute(int[] inArray)

答案 1 :(得分:6)

您正在尝试从compute调用Main这是一种static方法的实例方法。要解决这个问题,请将compute设为静态

public static int[] compute(int[] inArray) 

答案 2 :(得分:2)

Main是一个静态方法 - 它并不特定于任何单个对象 - 实际上,没有创建Program的实例来调用Maincompute是一个实例方法,需要在单个对象上调用。

两个选项:

  1. make compute static,这是有道理的,因为它不使用状态(字段):

    public static int[] compute(int[] inArray) {...}
    
  2. Main中创建一个实例:

    var obj = new Program();
    filled = obj.compute(empty); 
    
  3. 第一个在这里更具吸引力。为了完整起见,我将第二部分完全包括在内。

答案 3 :(得分:1)

更改public int[] compute(int[] inArray){...}

public static int[] compute(int[] inArray){..}

或从

更改您的来电
filled = compute(empty); 

filled = new Program().compute(empty); 

您拥有的compute()方法是实例(非静态)方法,需要调用实例。

答案 4 :(得分:0)

将static添加到compute方法声明中。

public static int[] compute(int[] inArray)

答案 5 :(得分:0)

你的方法不是静态的,而是从静态方法引用的。将其更改为静态。解决。

public static int[] compute(int[] inArray) { ... }