Visual Basic でのアクセス レベル
宣言された要素のアクセス レベルとは、その要素にアクセスするために必要な権限の程度、つまり、その要素に対する読み取りと書き込みの許可がどのようなコードに与えられるかを示します。 アクセス レベルは、要素自体を宣言する方法だけでなく、要素のコンテナーのアクセス レベルによっても左右されます。 コンテナー要素にアクセスできないコードは、そのコンテナー要素に含まれる要素にも一切アクセスできません。含まれる要素が Public として宣言されていても同じです。 たとえば、Private 構造体の中の Public 変数は、その構造体を含むクラス内からはアクセスできますが、そのクラスの外からはアクセスできません。
Public
宣言ステートメントで Public (Visual Basic) キーワードを使用して宣言した要素は、同じプロジェクト内からも、そのプロジェクトを参照している他のプロジェクトからも、そのプロジェクトからビルドされたアセンブリからもアクセスできます。 Public 宣言の例を次に示します。
Public Class classForEverybody
Public は、モジュール レベル、インターフェイス レベル、または名前空間レベルでのみ使用できます。 つまり、パブリック要素は、ソース ファイルまたは名前空間のレベルか、インターフェイス内、モジュール内、クラス内、または構造体内では宣言できますが、プロシージャ内では宣言できません。
Protected
宣言ステートメントで Protected (Visual Basic) キーワードを使用して宣言した要素は、同じクラス、またはそのクラスの派生クラスからしかアクセスできません。 Protected 宣言の例を次に示します。
Protected Class classForMyHeirs
Protected は、クラス レベルでのみ、しかも、クラスのメンバーを宣言する場合にのみ使用できます。 つまり、プロテクト要素は、クラス内では宣言できますが、ソース ファイルや名前空間のレベルと、インターフェイス内、モジュール内、構造体内、およびプロシージャ内では宣言できません。
Friend
宣言ステートメントで Friend (Visual Basic) キーワードを使用して宣言した要素は、同じアセンブリからはアクセスできますが、そのアセンブリの外部からはアクセスできません。 Friend 宣言の例を次に示します。
Friend stringForThisProject As String
Friend は、モジュール レベル、インターフェイス レベル、または名前空間レベルでのみ使用できます。 つまり、フレンド要素は、ソース ファイルまたは名前空間のレベルか、インターフェイス内、モジュール内、クラス内、または構造体内では宣言できますが、プロシージャ内では宣言できません。
Protected Friend
宣言ステートメントで Protected キーワードと Friend キーワードの両方を使用して宣言した要素は、派生クラス内と同じアセンブリ内のいずれか、または両方からアクセスできます。 次のコードは、Protected Friend 宣言の例を示します。
Protected Friend stringForProjectAndHeirs As String
Protected Friend は、クラス レベルでのみ、しかも、クラスのメンバーを宣言する場合にのみ使用できます。 つまり、プロテクト フレンド要素は、クラス内では宣言できますが、ソース ファイルや名前空間のレベルと、インターフェイス内、モジュール内、構造体内、およびプロシージャ内では宣言できません。
Private
宣言ステートメントで Private (Visual Basic) キーワードを使用して宣言した要素は、同じモジュール、クラス、または構造体からしかアクセスできません。 Private 宣言の例を次に示します。
Private numberForMeOnly As Integer
Private は、モジュール レベルでのみ使用できます。 つまり、プライベート要素は、モジュール内、クラス内、または構造体内では宣言できますが、ソース ファイルや名前空間のレベルと、インターフェイス内およびプロシージャ内では宣言できません。
モジュール レベルでは、アクセス レベル キーワードのない Dim ステートメントは、Private 宣言と等価です。 ただし、Private キーワードを使った方がコードがわかりやすくなります。
アクセス修飾子
アクセス レベルを指定するキーワードは、アクセス修飾子と呼ばれます。 アクセス修飾子の比較を次の表に示します。
[アクセス修飾子] |
付与されるアクセス レベル |
このアクセス レベルで宣言できる要素 |
この修飾子を使用できる宣言コンテキスト |
---|---|---|---|
Public |
無制限: パブリック要素を参照できるすべてのコードがアクセスできます。 |
インターフェイス モジュール Classes 構造体 構造体メンバー 手順 プロパティ メンバー変数 定数 列挙型 イベント 外部宣言 デリゲート |
ソース ファイル 名前空間 Interface Module Class Structure |
Protected |
派生: プロテクト要素を宣言するクラス内のコード、またはそのクラスの派生したクラスが、この要素にアクセスできます。 |
インターフェイス Classes 構造体 手順 プロパティ メンバー変数 定数 列挙型 イベント 外部宣言 デリゲート |
Class |
Friend |
アセンブリ: フレンド要素が宣言されているアセンブリ内のコードが、この要素にアクセスできます。 |
インターフェイス モジュール Classes 構造体 構造体メンバー 手順 プロパティ メンバー変数 定数 列挙型 イベント 外部宣言 デリゲート |
ソース ファイル 名前空間 Interface Module Class Structure |
Protected Friend |
Protected と Friend の結合: プロテクト フレンド要素と同じクラスまたは同じアセンブリ内のコード、または要素のクラスから派生した各クラス内から、要素にアクセスできます。 |
インターフェイス Classes 構造体 手順 プロパティ メンバー変数 定数 列挙型 イベント 外部宣言 デリゲート |
Class |
Private |
宣言コンテキスト: 含まれている型の中のコードを含め、プライベート要素が宣言されている型内のコードが、要素にアクセスできます。 |
インターフェイス Classes 構造体 構造体メンバー 手順 プロパティ メンバー変数 定数 列挙型 イベント 外部宣言 デリゲート |
Module Class Structure |
参照
処理手順
方法: 変数の可用性を制御する (Visual Basic)