コンパイラ エラー CS0106

修飾子 'modifier' がこの項目に対して有効ではありません。

クラスまたはインターフェイスのメンバーが、無効なアクセス修飾子でマークされました。 無効な修飾子の例を次に示します。

  • 静的修飾子はローカル関数では許可されていません。 この静的ローカル関数の機能は、C# 8.0 以降でサポートされています。 C# 8.0 をサポートしていないコンパイラでこの機能を使用しようとすると、CS0106 が生成されます。 ただし、C# 8.0 をサポートするコンパイラに C# 8.0 より前の言語バージョンが設定されている場合、C# 8.0 以降の使用を推奨する診断が生成されます。

  • public キーワードは、明示的なインターフェイス宣言では使用できません。 この場合は、明示的なインターフェイス宣言から public キーワードを削除してください。

  • 明示的なインターフェイスの実装はオーバーライドできないため、abstract キーワードは明示的なインターフェイス宣言で使用できません。

  • アクセス修飾子をローカル関数に使用することはできません。 ローカル関数は常にプライベートです。

  • ref readonly 戻り値の型を除き、クラス型のメソッドには readonly キーワードを使用できません (readonly キーワードは ref キーワードの後に指定する必要があります)。

Visual Studio の以前のリリースでは、クラスに対して static 修飾子を使用できませんでしたが、Visual Studio 2005 以降では static クラスを使用できます。

詳細については、「インターフェイス」を参照してください。

次の例では 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
}