Errore del compilatore CS0106

Il modificatore "modifier" non è valido per questo elemento

Un membro di classe o interfaccia è stato contrassegnato con un modificatore di accesso non valido. Negli esempi seguenti vengono descritti alcuni dei modificatori non validi:

  • Il modificatore static non è consentito in una funzione locale. La funzionalità della funzione locale statica è supportata a partire da C# 8.0. Un compilatore che non supporta C# 8.0 produce CS0106 quando si tenta di usare questa funzionalità. Tuttavia, un compilatore che supporta C# 8.0, ma la versione del linguaggio set è precedente a C# 8.0 genererà una diagnostica che suggerisce di usare C# 8.0 o versione successiva.

  • La parola chiave public non è consentita in una dichiarazione esplicita dell'interfaccia. In questo caso eliminare la parola chiave public dalla dichiarazione esplicita dell'interfaccia.

  • La parola chiave abstract non è consentita in una dichiarazione esplicita dell'interfaccia poiché un'implementazione esplicita dell'interfaccia non può mai essere sottoposta a override.

  • I modificatori di accesso non sono consentiti in una funzione locale. Le funzioni locali sono sempre private.

  • La parola chiave readonly non è consentita nei metodi di un tipo di classe, ad eccezione di ref readonly returns (la parola chiave readonly deve essere visualizzata dopo la parola chiave ref).

Nelle versioni precedenti di Visual Studio il modificatore static non è consentito per una classe, ma le classi static sono consentite a partire da Visual Studio 2005.

Per altre informazioni, vedere Interfacce.

Esempio

L'esempio seguente genera l'errore 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
}