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 ProtectedFriend の和集合:

Protected Friend 要素と同じクラスまたは同じアセンブリ、または要素のクラスから派生した任意のクラス内のコードが、これにアクセスできます
インターフェイス

クラス

構造体

プロシージャ

プロパティ

メンバー変数

定数

列挙

イベント

外部宣言

デリゲート
クラス
Private 宣言コンテキスト:

含まれている型内のコードを含む、Private 要素を宣言する型のコードが、要素にアクセスできます
インターフェイス

クラス

構造体

構造体メンバー

プロシージャ

プロパティ

メンバー変数

定数

列挙

イベント

外部宣言

デリゲート
Module

クラス

構造体
Private Protected Private Protected 要素を宣言するクラスのコード、または基底クラスと同じアセンブリ内に存在する派生クラスのコード。 インターフェイス

クラス

構造体

プロシージャ

プロパティ

メンバー変数

定数

列挙

イベント

外部宣言

デリゲート
クラス

関連項目