Partilhar via


Erro do compilador CS0106

O modificador 'modificador' não é válido para este item

Uma classe ou membro da interface foi marcado com um modificador de acesso inválido. Os exemplos a seguir descrevem alguns desses modificadores inválidos:

  • O modificador estático não é permitido em uma função local. O recurso de função local estática é suportado a partir do C# 8.0. Um compilador que não suporta C# 8.0 produz CS0106 quando você tenta usar esse recurso. No entanto, um compilador que suporta C# 8.0, mas a versão de idioma definida é anterior ao C# 8.0 produzirá um diagnóstico sugerindo que você use C# 8.0 ou posterior.

  • A public palavra-chave não é permitida em uma declaração de interface explícita. Nesse caso, remova a public palavra-chave da declaração explícita da interface.

  • A palavra-chave abstrata não é permitida em uma declaração de interface explícita porque uma implementação de interface explícita nunca pode ser substituída.

  • Modificadores de acesso não são permitidos em uma função local. As funções locais são sempre privadas.

  • A palavra-chave readonly não é permitida em métodos em um tipo de classe, com exceção de ref readonly returns (readonly keyword must appear after the ref keyword).

Em versões anteriores do Visual Studio, o static modificador não era permitido em uma classe, mas static as classes são permitidas a partir do Visual Studio 2005.

Para obter mais informações, consulte Interfaces.

Exemplo

O exemplo a seguir gera 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
}