Compartilhar via


Erro do Compilador CS0106

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

Um membro de classe ou de 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ático tem suporte do C# 8.0 em diante. Um compilador que não dá suporte ao C# 8.0 produz o erro CS0106 quando você tenta usar esse recurso. No entanto, um compilador que dá suporte ao C# 8.0, mas cuja versão de idioma definida é anterior ao C# 8.0, produzirá um diagnóstico sugerindo que você use o C# 8.0 ou versão posterior.

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

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

  • Os 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 nos métodos em um tipo de classe, com exceção de retornos de ref readonly (a palavra-chave readonly deve aparecer após a palavra-chave ref).

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

Para obter mais informações, consulte Interfaces.

Exemplo

O seguinte exemplo gera o erro 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
}