#c#
#c#
Вопрос:
Я создаю действительно базовую программу, в которой есть метод для заполнения массива, но я получаю ошибку, которую я не понимаю. Я программист на Java, пытающийся освоиться с C # и .NET. Любая помощь была бы отличной.
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 Для тестовых потоков нестатического поля, метода или свойства требуется ссылка на объект.Program.compute(int[])’ C:Usershunter.mcmillenDesktopTestProcessSplittingTestProcessSplittingProgram.cs 17 22 Тестовые потоки
Спасибо, Хантер
Комментарии:
1. В этом случае Java выдаст вам аналогичную ошибку … вы пытаетесь вызвать метод экземпляра, как если бы он был статическим.
2. правильно, но компилятор Java выдает мне это сообщение: нестатический метод compute (int[]) не может ссылаться из статического контекста, который я действительно могу понять.
Ответ №1:
Метод вычисления должен быть статическим.
public static int[] compute(int[] inArray)
Ответ №2:
Вы пытаетесь вызвать, compute
который является методом экземпляра, из Main
который является static
методом. Чтобы исправить это, также сделайте compute
статичным`
public static int[] compute(int[] inArray)
Ответ №3:
Main
это статический метод — он не специфичен для какого-либо отдельного объекта — действительно, ни один экземпляр Program
не создается для вызова Main
. compute
является методом экземпляра и должен вызываться для одного объекта.
Два варианта:
-
сделайте
compute
статическим, что имеет смысл, поскольку оно не использует состояние (поля):public static int[] compute(int[] inArray) {...}
-
создайте экземпляр в
Main
:var obj = new Program(); filled = obj.compute(empty);
Первый вариант здесь более привлекателен. Я включил второй исключительно для полноты картины.
Ответ №4:
Изменение public int[] compute(int[] inArray){...}
Для
public static int[] compute(int[] inArray){..}
или измените свой вызов с
filled = compute(empty);
Для
filled = new Program().compute(empty);
compute()
Используемый вами метод является экземплярным (нестатическим) методом и требует вызова экземпляра.
Ответ №5:
Добавьте статику в объявление метода вычисления.
public static int[] compute(int[] inArray)
Ответ №6:
Ваш метод не является статическим, на него ссылаются из статического метода. Измените его на статический. Решен.
public static int[] compute(int[] inArray) { ... }