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