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


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

Модификатор "модификатор" недопустим для этого элемента

Член класса или интерфейса помечен недопустимым модификатором доступа. В следующих примерах описываются некоторые недопустимые модификаторы.

  • Модификатор static нельзя использовать для локальной функции. Функция статической локальной функции поддерживается начиная с C# 8.0. Компилятор, который не поддерживает C# 8.0, выдает сообщение об ошибке CS0106 при попытке использовать эту функцию. Однако компилятор, поддерживающий C# 8.0, но версия языкового интерфейса которого до C# 8.0, выдаст диагностическое сообщение с предложением использовать C# 8.0 или более позднюю версию.

  • Ключевое слово public не разрешается использовать в явных объявлениях интерфейсов. В этом случае удалите ключевое слово public из явного объявления интерфейса.

  • Ключевое слово abstract не разрешается использовать в явных объявлениях интерфейсов, так как явную реализацию интерфейса нельзя переопределить.

  • Модификаторы доступа не могут быть указаны для локальной функции. Локальные функции всегда являются частными.

  • Ключевое слово чтения не допускается для методов в типе класса, за исключением ref readonly возвращаемых (readonlyключевое слово должны отображаться после ref ключевое слово).

В предыдущих выпусках Visual Studio модификатор static не разрешалось использовать с классами, но, начиная с Visual Studio 2005, классы с модификатором static являются допустимыми.

Дополнительные сведения см. в статье Интерфейсы.

Пример

В следующем примере возникает ошибка CS0106:

// CS0106.cs
namespace MyNamespace
{
   interface I
   {
      void M1();
      void M2();
   }

   public class MyClass : I
   {
      public readonly int Prop1 { get; set; }   // CS0106
      public int Prop2 { get; readonly set; }   // CS0106

      public void I.M1() {}   // CS0106
      abstract void I.M2() {}   // CS0106

      public void AccessModifierOnLocalFunction()
      {
         public void LocalFunction() {}   // CS0106
      }

      public readonly void ReadonlyMethod() {}   // CS0106
      // Move the `readonly` keyword after the `ref` keyword
      public readonly ref int ReadonlyBeforeRef(ref int reference)   // CS0106
      {
         return ref reference;
      }

      public static void Main() {}
   }

   public readonly class ReadonlyClass {}   // CS0106
}