buivuanh Ответов: 3

ошибка ссылка на объект требуется для нестатического поля, метода или свойства


i learn c++ and i begin learn c#, i dont understand method
help me error


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

namespace text1
{
    class Program
    {
        public int pt(int l, int r)
        {
            return l + r;
        }
        static void Main(string[] args)
        {
            float i;
            var c = 10;
            Console.WriteLine("Hello World");
            Console.ReadLine();
            for (i = 1; i <= 10; i++)
                {   Console.WriteLine("Hello World");
                    Console.WriteLine(c);
                    
                };
            string a, b;
            a = "vu anh";
            b = "dep trai";
            Console.WriteLine(a + " " + b);
            int j;
            j = pt(3, 4);
            Console.WriteLine(i);
            Console.Beep();
            Console.ReadLine();
        }
    }
}

i get error "An object reference is required for the non-static field, method, or property 'text1.Program.method(int, int)'"
thank

ZurdoDev

Где код, который вызывает эту ошибку?

3 Ответов

Рейтинг:
20

Per Söderlund

Поскольку Main является статическим, вы не можете использовать остальную часть класса программы внутри вашего статического метода.

Поэтому вам нужен экземпляр класса Program.
Изменить

int j;        
j = pt(3, 4);


В
int j;
Program P = new Program();
j = P.pt(3, 4);


Хотя я бы рекомендовал написать метод pt(int,int) в другом классе, но, возможно, это только я.


Рейтинг:
2

Chris Ross 2

Альтернативы, для получения которого необходимо создать экземпляр Program это вы делаете pt() сам по себе статический метод. С pt() он работает только с его параметрами (то есть не ссылается ни на какие элементы экземпляра своего определяющего типа), делая его статичным.


Рейтинг:
10

Frederico Barbosa

Привет,

вы вызываете метод экземпляра pt () из статического метода (Main). Чтобы исправить эту ошибку, либо (i) объявите переменную типа program и затем вызовите метод, либо (2) Добавьте "static" в объявление метода pt ().

// option 1
int j;
Program program = new Program(); // new line
j = program.pt(3, 4);            // replace this line "j = pt(3, 4);"

// option 2
public static int pt(int l, int r)
{
    return l + r;
}