Поделиться через


Ошибка компилятора CS0120

Обновлен: Ноябрь 2007

Сообщение об ошибке

Для нестатического поля, метода или свойства "член" требуется ссылка на объект
An object reference is required for the nonstatic field, method, or property 'member'

Для использования нестатического поля, метода или свойства необходимо сначала создать экземпляр объекта. Дополнительные сведения о статических методах см. в разделе Статические классы и члены статических классов (руководство по программированию в C#). Дополнительные сведения о создании экземпляров классов см. в разделе Конструкторы экземпляров (руководство по программированию в C#).

Следующий пример приводит к возникновению ошибки CS0120.

// CS0120_1.cs
public class MyClass
{
   // Non-static field
   public int i; 
   // Non-static method
   public void f(){}
   // Non-static property
   int Prop
   {
      get 
      {
         return 1; 
      }
   }

   public static void Main()
   {
      i = 10;   // CS0120
      f();   // CS0120
      int p = Prop;   // CS0120
      // try the following lines instead
      // MyClass mc = new MyClass();
      // mc.i = 10;
      // mc.f();
      // int p = mc.Prop;
   }
}

Ошибка CS0120 также создается в случае вызова нестатического метода из статического, например:

// CS0120_2.cs
// CS0120 expected
using System;

public class MyClass
{
   public static void Main()
   {
      TestCall();   // CS0120
      // To call a non-static method from Main,
      // first create an instance of the class.
      // Use the following two lines instead:
      // MyClass anInstanceofMyClass = new MyClass();
      // anInstanceofMyClass.TestCall();
   }

   public void TestCall()
   {
   }
}

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

// CS0120_3.cs
using System;

public class MyClass
{
   public static void Main()
   {
      do_it("Hello There");   // CS0120
   }

   private void do_it(string sText)
   // You could also add the keyword static to the method definition:
   // private static void do_it(string sText)
   {
      Console.WriteLine(sText);
   }
}

См. также

Ссылки

Классы и структуры (Руководство по программированию в C#)