Erreur du compilateur CS0106

Le modificateur 'modifier' n’est pas valide pour cet élément

Un membre de classe ou d’interface a été marqué avec un modificateur d’accès non valide. Les exemples suivants illustrent certains de ces modificateurs non valides :

  • Le modificateur static n’est pas autorisé sur une fonction locale. La fonctionnalité de fonction locale statique est prise en charge à partir de C# 8.0. Un compilateur qui ne prend pas en charge C# 8.0 produit CS0106 lorsque vous essayez d’utiliser cette fonctionnalité. Toutefois, un compilateur qui prend en charge C# 8.0 mais dont la version de langage définie est antérieure à C# 8.0 génère un diagnostic suggérant d’utiliser C# 8.0 ou version ultérieure.

  • Le mot clé public n’est pas autorisé dans une déclaration d’interface explicite. Dans ce cas, supprimez le mot clé public de la déclaration d’interface explicite.

  • Le mot clé abstract n’est pas autorisé dans une déclaration d’interface explicite, car une implémentation d’interface explicite ne peut jamais être substituée.

  • Les modificateurs d’accès ne sont pas autorisés sur une fonction locale. Les fonctions locales sont toujours privées.

  • Le mot clé readonly n’est pas autorisé dans les méthodes d’un type de classe, à l’exception des retours ref readonly (le mot clé readonly doit apparaître après le mot clé ref).

Dans les versions antérieures de Visual Studio, le modificateur static n’était pas autorisé sur une classe, mais les classes static sont autorisées à compter de Visual Studio 2005.

Pour plus d'informations, consultez Interfaces.

Exemple

L’exemple suivant génère l’erreur 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
}