Visual Basic でのアクセス レベル
宣言された要素のアクセス レベルは、それにアクセスする機能の範囲、つまり、読み取りまたは書き込みのアクセス許可があるコードです。 これは、要素自体を宣言する方法だけでなく、要素のコンテナーのアクセス レベルによっても決定されます。 コンテナー要素にアクセスできないコードは、Public
として宣言されていても、格納されている要素のいずれにもアクセスできません。 たとえば、Private
構造体の Public
変数は、構造体を含むクラス内からアクセスできますが、そのクラスの外部からはアクセスできません。
Public
宣言ステートメント内の Public キーワードは、要素に、同じプロジェクト内の任意の場所のコードから、プロジェクトを参照する他のプロジェクトから、およびプロジェクトからビルドされた任意のアセンブリからアクセスできることを指定します。 次のコードは、サンプルの Public
宣言を示しています。
Public Class ClassForEverybody
Public
は、モジュール、インターフェイス、または名前空間レベルでのみ使用できます。 つまり、Public 要素は、ソース ファイルまたは名前空間のレベルで、またはインターフェイス、モジュール、クラス、または構造体の内部で宣言できますが、プロシージャ内では宣言できません。
Protected
宣言ステートメントの Protected キーワードは、要素にアクセスできるのは、同じクラス内から、またはこのクラスから派生したクラスからのみであることを指定します。 次のコードは、サンプルの Protected
宣言を示しています。
Protected Class ClassForMyHeirs
Protected
は、クラス レベルでのみ、およびクラスのメンバーを宣言する場合にのみ使用できます。 つまり、Protected 要素はクラスで宣言できますが、ソース ファイルまたは名前空間のレベル、またはインターフェイス、モジュール、構造体、またはプロシージャの内部では宣言できません。
Friend
宣言ステートメントの Friend キーワードは、要素には同じアセンブリ内からアクセスできますが、アセンブリの外部からはアクセスできないことを指定します。 次のコードは、サンプルの Friend
宣言を示しています。
Friend stringForThisProject As String
Friend
は、モジュール、インターフェイス、または名前空間レベルでのみ使用できます。 つまり、Friend 要素は、ソース ファイルまたは名前空間のレベルで、またはインターフェイス、モジュール、クラス、または構造体の内部で宣言できますが、プロシージャ内では宣言できません。
Protected Friend
宣言ステートメントの Protected Friend キーワードの組み合わせは、派生クラスまたは同じアセンブリ内、またはその両方から要素にアクセスできることを指定します。 次のコードは、サンプルの Protected Friend
宣言を示しています。
Protected Friend stringForProjectAndHeirs As String
Protected Friend
は、クラス レベルでのみ、およびクラスのメンバーを宣言する場合にのみ使用できます。 つまり、Protected Friend 要素はクラスで宣言できますが、ソース ファイルまたは名前空間のレベル、またはインターフェイス、モジュール、構造体、またはプロシージャの内部では宣言できません。
Private
宣言ステートメントの Private キーワードは、要素にアクセスできるのは、同じモジュール、クラス、または構造体内からのみであることを指定します。 次のコードは、サンプルの Private
宣言を示しています。
Private _numberForMeOnly As Integer
Private
は、モジュール レベルでのみ使用できます。 つまり、Private 要素はモジュール、クラス、または構造体内で宣言できますが、ソース ファイルまたは名前空間のレベル、インターフェイス内、またはプロシージャ内では宣言できません。
モジュール レベルでは、アクセス レベルのキーワードのない Dim
ステートメントは、Private
宣言に相当します。 ただし、Private
キーワードを使用して、コードを読みやすくし、解釈しやすくすることもできます。
Private Protected
宣言ステートメントで Private Protected キーワードの組み合わせを使用すると、要素には、同じクラス内からだけでなく、含まれているクラスと同じアセンブリ内にある派生クラスからもアクセスできることが指定されます。 Private Protected
アクセス修飾子は Visual Basic 15.5 以降でサポートされています。
次の例は、Private Protected
宣言を示しています。
Private Protected internalValue As Integer
Private Protected
要素は、クラス内でのみ宣言できます。 インターフェイスまたは構造体内で宣言することはできません。また、ソース ファイルまたは名前空間のレベル、インターフェイスまたは構造体の内部、またはプロシージャ内で宣言することもできません。
Private Protected
アクセス修飾子は Visual Basic 15.5 以降でサポートされています。 これを使用するには、Visual Basic プロジェクト (*.vbproj) ファイルに次の要素を追加します。 システムに Visual Basic 15.5 以降がインストールされている限り、Visual Basic コンパイラの最新バージョンでサポートされているすべての言語機能を利用できます。
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
Private Protected
アクセス修飾子を使用するには、Visual Basic プロジェクト (*.vbproj) ファイルに次の要素を追加する必要があります。
<PropertyGroup>
<LangVersion>15.5</LangVersion>
</PropertyGroup>
詳細については、Visual Basic 言語バージョンの設定に関するページを参照してください。
アクセス修飾子
アクセス レベルを指定するキーワードは、アクセス修飾子と呼ばれます。 アクセス修飾子の比較を次の表に示します。
アクセス修飾子 | 付与されたアクセス レベル | このアクセス レベルで宣言できる要素 | この修飾子を使用できる宣言コンテキスト |
---|---|---|---|
Public |
無制限: Public 要素を参照できるすべてのコードが、これにアクセスできます |
インターフェイス モジュール クラス 構造体 構造体メンバー プロシージャ プロパティ メンバー変数 定数 列挙 イベント 外部宣言 デリゲート |
ソース ファイル 名前空間 Interface Module クラス 構造体 |
Protected |
派生: Protected 要素を宣言するクラス、またはそこから派生したクラスのコードが、要素にアクセスできます |
インターフェイス クラス 構造体 プロシージャ プロパティ メンバー変数 定数 列挙 イベント 外部宣言 デリゲート |
クラス |
Friend |
アセンブリ: Friend 要素を宣言するアセンブリ内のコードが、これにアクセスできます |
インターフェイス モジュール クラス 構造体 構造体メンバー プロシージャ プロパティ メンバー変数 定数 列挙 イベント 外部宣言 デリゲート |
ソース ファイル 名前空間 Interface Module クラス 構造体 |
Protected Friend |
Protected と Friend の和集合:Protected Friend 要素と同じクラスまたは同じアセンブリ、または要素のクラスから派生した任意のクラス内のコードが、これにアクセスできます |
インターフェイス クラス 構造体 プロシージャ プロパティ メンバー変数 定数 列挙 イベント 外部宣言 デリゲート |
クラス |
Private |
宣言コンテキスト: 含まれている型内のコードを含む、Private 要素を宣言する型のコードが、要素にアクセスできます |
インターフェイス クラス 構造体 構造体メンバー プロシージャ プロパティ メンバー変数 定数 列挙 イベント 外部宣言 デリゲート |
Module クラス 構造体 |
Private Protected |
Private Protected 要素を宣言するクラスのコード、または基底クラスと同じアセンブリ内に存在する派生クラスのコード。 | インターフェイス クラス 構造体 プロシージャ プロパティ メンバー変数 定数 列挙 イベント 外部宣言 デリゲート |
クラス |
関連項目
.NET