プロパティ アクセサを 'NotOverridable' プロパティ内で '<accessmodifier>' として宣言できません。

更新 : 2007 年 11 月

NotOverridable プロパティの Get ステートメントまたは Set ステートメント (Visual Basic) に、Private キーワードが含まれています。

Property ステートメントに NotOverridable と Private を組み合わせて指定できない理由を以下に説明します。

  1. 基本クラスのプロパティまたはプロシージャをオーバーライドしていないプロパティまたはプロシージャには、既定で NotOverridable が設定されます。

  2. しかし、基本クラスのプロパティまたはプロシージャをオーバーライドした派生クラスのプロパティまたはプロシージャには、既定で Overridable が設定されます。オーバーライドの階層構造を終了するには、オーバーライドを NotOverridable で宣言します。NotOverridable はこれ以外の目的には使用できません。つまり、NotOverridable は Overrides と組み合わせた場合しか使用できません。

  3. 基本クラスのプロパティまたはプロシージャが Private (Visual Basic) で宣言されている場合、派生クラスからアクセス不可能であるため、そのプロパティまたはプロシージャをオーバーライドできません。このため、Private と Overridable を組み合わせて使うことはできません。

  4. プロパティまたはプロシージャをオーバーライドするには、オーバーライドしているプロパティまたはプロシージャとシグネチャが同じであるだけでなく、アクセス レベルも同じであることが必要です。つまり、オーバーライドしているプロパティまたはプロシージャに Private を指定できません。オーバーライド可能なプロパティまたはプロシージャには、Private を指定できないからです。

  5. NotOverridable を指定できるのは、オーバーライドしているプロパティまたはプロシージャだけなので、これを Private と組み合わせて指定することはできません。

同じ理由で、オーバーライドしているプロパティの個々のプロパティ プロシージャ (Get および Set) を Private にすることはできません。

Error ID: BC31106

このエラーを解決するには

  • Get ステートメントまたは Set ステートメントから Private キーワードを削除するか、Property ステートメントから Overrides キーワードと NotOverridable キーワードを削除します。

参照

処理手順

方法 : 複数のアクセス レベルを持つプロパティを宣言する

概念

Property プロシージャ

シャドウとオーバーライドの違い