C# 对象引用问题
本文关键字:问题 对象引用 | 更新日期: 2023-09-27 17:58:17
我正在创建一个非常基本的程序,它有一个填充数组的方法,但我得到一个我不明白的错误。我是一名试图适应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 个测试线程
谢谢猎人
计算方法应该是静态的。
public static int[] compute(int[] inArray)
您正在尝试调用compute
,这是一个实例方法,Main
这是一个static
方法。 要解决此问题,compute
也设置为静态">
public static int[] compute(int[] inArray)
Main
是一个静态方法 - 它不特定于任何单个对象 - 实际上,没有创建Program
实例来调用Main
。 compute
是一个实例方法,需要在单个对象上调用。
两个选项:
使
compute
静态,这是有意义的,因为它不使用状态(字段(:public static int[] compute(int[] inArray) {...}
在
Main
中创建实例:var obj = new Program(); filled = obj.compute(empty);
第一个在这里更吸引人。我包括第二个纯粹是为了完整。
更改public int[] compute(int[] inArray){...}
自
public static int[] compute(int[] inArray){..}
或将通话从
filled = compute(empty);
自
filled = new Program().compute(empty);
您拥有的compute()
方法是实例(非静态(方法,需要调用实例。
将静态添加到计算方法声明中。
public static int[] compute(int[] inArray)
你的方法不是静态的,而是从静态方法引用的。将其更改为静态。解决。
public static int[] compute(int[] inArray) { ... }