Błąd kompilatora CS0106

Modyfikator "modyfikator" jest nieprawidłowy dla tego elementu

Element członkowski klasy lub interfejsu został oznaczony nieprawidłowym modyfikatorem dostępu. W poniższych przykładach opisano niektóre z tych nieprawidłowych modyfikatorów:

  • Modyfikator statyczny nie jest dozwolony w funkcji lokalnej. Funkcja statycznej funkcji lokalnej jest obsługiwana od języka C# 8.0. Kompilator, który nie obsługuje języka C# 8.0, tworzy CS0106 podczas próby użycia tej funkcji. Jednak kompilator obsługujący język C# 8.0, ale ustawiona wersja języka jest wcześniejsza niż C# 8.0, utworzy diagnostykę sugerującą, że używasz języka C# 8.0 lub nowszego.

  • Słowo public kluczowe nie jest dozwolone w jawnej deklaracji interfejsu. W takim przypadku usuń public słowo kluczowe z jawnej deklaracji interfejsu.

  • Słowo kluczowe abstrakcyjne nie jest dozwolone w jawnej deklaracji interfejsu, ponieważ jawna implementacja interfejsu nigdy nie może być zastępowana.

  • Modyfikatory dostępu nie są dozwolone w funkcji lokalnej. Funkcje lokalne są zawsze prywatne.

  • Słowo kluczowe readonly nie jest dozwolone w metodach w typie klasy, a wyjątek ref readonly zwraca (readonly słowo kluczowe musi pojawiać się po słowie ref kluczowym).

W poprzednich wersjach programu Visual Studio static modyfikator nie był dozwolony w klasie, ale static klasy są dozwolone począwszy od programu Visual Studio 2005.

Aby uzyskać więcej informacji, zobacz Interfejsy.

Przykład

Poniższy przykład generuje 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
}