Comparteix a través de


Error del compilador CS0106

El modificador 'modifier' no es válido para este elemento

Se ha marcado un miembro de clase o interfaz con un modificador de acceso no válido. En los ejemplos siguientes se describen algunos de estos modificadores no válidos:

  • El modificador static no se permite en una función local. La característica de función local estática se admite a partir de C# 8.0. Un compilador que no admite C# 8.0 produce el error CS0106 al intentar usar esta característica. Pero, aunque un compilador admita C# 8.0, si la versión del lenguaje establecido es anterior, producirá un diagnóstico que le sugerirá que use C# 8.0 o una versión posterior.

  • La palabra clave public no está permitida en una declaración explícita de la interfaz. En este caso, quite la palabra clave public de la declaración explícita de la interfaz.

  • La palabra clave abstract no está permitida en una declaración explícita de la interfaz porque nunca se puede invalidar una implementación de interfaz explícita.

  • No se permiten modificadores de acceso en una función local. Las funciones locales siempre son privadas.

  • No se permite la palabra clave readonly en los métodos de un tipo de clase, con la excepción de devoluciones de ref readonly (la palabra clave readonly debe aparecer después de la palabra clave ref).

En versiones anteriores de Visual Studio, el modificador static no estaba permitido en una clase, pero las clases static se permiten a partir de Visual Studio 2005.

Para más información, vea Interfaces.

Ejemplo

El ejemplo siguiente genera el error 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
}