Visual Basic でのアクセス レベルAccess Levels in Visual Basic

宣言された要素のアクセスレベルは、その要素にアクセスするためのアクセス許可の範囲です。つまり、読み取りまたは書き込みのアクセス許可を持っているコードにアクセスできます。The access level of a declared element is the extent of the ability to access it, that is, what code has permission to read it or write to it. これは、要素自体を宣言する方法だけでなく、要素のコンテナーのアクセスレベルによっても決定されます。This is determined not only by how you declare the element itself, but also by the access level of the element's container. コンテナー要素にアクセスできないコードは、Publicとして宣言されていても、含まれている要素のいずれにもアクセスできません。Code that cannot access a containing element cannot access any of its contained elements, even those declared as Public. たとえば、Private 構造体の Public 変数は、構造体を含むクラス内からアクセスできますが、そのクラスの外部からはアクセスできません。For example, a Public variable in a Private structure can be accessed from inside the class that contains the structure, but not from outside that class.

パブリックPublic

宣言ステートメント内のPublicキーワードは、同じプロジェクト内の任意の場所のコード、プロジェクトを参照する他のプロジェクト、およびプロジェクトからビルドされた任意のアセンブリから、要素にアクセスできることを指定します。The Public keyword in the declaration statement specifies that the element can be accessed from code anywhere in the same project, from other projects that reference the project, and from any assembly built from the project. 次のコードは、Public の宣言の例を示しています。The following code shows a sample Public declaration:

Public Class ClassForEverybody

Public は、モジュール、インターフェイス、または名前空間レベルでのみ使用できます。You can use Public only at module, interface, or namespace level. つまり、パブリック要素は、ソースファイルまたは名前空間のレベルで、またはインターフェイス、モジュール、クラス、または構造体の内部で宣言できますが、プロシージャ内では宣言できません。This means you can declare a public element at the level of a source file or namespace, or inside an interface, module, class, or structure, but not in a procedure.

プロテクトProtected

宣言ステートメント内のProtectedキーワードは、同じクラス内から、またはこのクラスから派生したクラスからのみ要素にアクセスできることを指定します。The Protected keyword in the declaration statement specifies that the element can be accessed only from within the same class, or from a class derived from this class. 次のコードは、Protected の宣言の例を示しています。The following code shows a sample Protected declaration:

Protected Class ClassForMyHeirs

Protected は、クラスのメンバーを宣言する場合にのみ、クラスレベルで使用できます。You can use Protected only at class level, and only when you declare a member of a class. つまり、プロテクト要素はクラスで宣言できますが、ソースファイルまたは名前空間のレベル、またはインターフェイス、モジュール、構造体、またはプロシージャの内部では宣言できません。This means you can declare a protected element in a class, but not at the level of a source file or namespace, or inside an interface, module, structure, or procedure.

FriendFriend

宣言ステートメントのFriendキーワードは、要素がアセンブリの外部からではなく、同じアセンブリ内からアクセスできることを指定します。The Friend keyword in the declaration statement specifies that the element can be accessed from within the same assembly, but not from outside the assembly. 次のコードは、Friend の宣言の例を示しています。The following code shows a sample Friend declaration:

Friend stringForThisProject As String

Friend は、モジュール、インターフェイス、または名前空間レベルでのみ使用できます。You can use Friend only at module, interface, or namespace level. これは、ソースファイルまたは名前空間のレベルで、またはインターフェイス、モジュール、クラス、または構造体内で、プロシージャ内ではなく、フレンド要素を宣言できることを意味します。This means you can declare a friend element at the level of a source file or namespace, or inside an interface, module, class, or structure, but not in a procedure.

Protected FriendProtected Friend

宣言ステートメントでProtected Friendキーワードを組み合わせると、派生クラスまたは同じアセンブリ内、またはその両方から要素にアクセスできることが指定されます。The Protected Friend keyword combination in the declaration statement specifies that the element can be accessed either from derived classes or from within the same assembly, or both. 次のコードは、Protected Friend の宣言の例を示しています。The following code shows a sample Protected Friend declaration:

Protected Friend stringForProjectAndHeirs As String

Protected Friend は、クラスのメンバーを宣言する場合にのみ、クラスレベルで使用できます。You can use Protected Friend only at class level, and only when you declare a member of a class. つまり、保護された friend 要素はクラスで宣言できますが、ソースファイルまたは名前空間のレベル、またはインターフェイス、モジュール、構造体、またはプロシージャの内部では宣言できません。This means you can declare a protected friend element in a class, but not at the level of a source file or namespace, or inside an interface, module, structure, or procedure.

プライベートPrivate

宣言ステートメントのPrivateキーワードは、同じモジュール、クラス、または構造体内からのみ要素にアクセスできることを指定します。The Private keyword in the declaration statement specifies that the element can be accessed only from within the same module, class, or structure. 次のコードは、Private の宣言の例を示しています。The following code shows a sample Private declaration:

Private _numberForMeOnly As Integer

Private は、モジュール レベルでのみ使用できます。You can use Private only at module level. つまり、モジュール、クラス、または構造体内でプライベート要素を宣言できますが、ソースファイルまたは名前空間のレベル、インターフェイス内、またはプロシージャ内では宣言できません。This means you can declare a private element inside a module, class, or structure, but not at the level of a source file or namespace, inside an interface, or in a procedure.

モジュールレベルでは、アクセスレベルキーワードのない Dim ステートメントは、Private 宣言と同じです。At the module level, the Dim statement without any access level keywords is equivalent to a Private declaration. ただし、Private キーワードを使用して、コードを読みやすくし、解釈しやすくすることもできます。However, you might want to use the Private keyword to make your code easier to read and interpret.

Private ProtectedPrivate Protected

宣言ステートメント内のPrivate Protectedキーワードの組み合わせは、同じクラス内から、および親クラスと同じアセンブリ内にある派生クラスからのみ、要素にアクセスできることを指定します。The Private Protected keyword combination in the declaration statement specifies that the element can be accessed only from within the same class, as well as from derived classes found in the same assembly as the containing class. Private Protected アクセス修飾子は Visual Basic 15.5 以降でサポートされています。The Private Protected access modifier is supported starting with Visual Basic 15.5.

次の例は、Private Protected 宣言を示しています。The following example shows a Private Protected declaration:

Private Protected internalValue As Integer

Private Protected 要素は、クラス内でのみ宣言できます。You can declare a Private Protected element only inside of a class. インターフェイスまたは構造体内で宣言することはできません。また、インターフェイスまたは構造体の内部、またはプロシージャ内のソースファイルや名前空間のレベルで宣言することもできません。You cannot declare it within an interface or structure, nor can you declare it at the level of a source file or namespace, inside an interface or a structure, or in a procedure.

Private Protected アクセス修飾子は Visual Basic 15.5 以降でサポートされています。The Private Protected access modifier is supported by Visual Basic 15.5 and later. これを使用するには、次の要素を Visual Basic プロジェクト ( *.vbproj) ファイルに追加します。To use it, you add the following element to your Visual Basic project (*.vbproj) file. システムに Visual Basic 15.5 以降がインストールされている限り、最新バージョンの Visual Basic コンパイラでサポートされているすべての言語機能を利用できます。As long as Visual Basic 15.5 or later is installed on your system, it lets you take advantage of all the language features supported by the latest version of the Visual Basic compiler:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Private Protected アクセス修飾子を使用するには、Visual Basic プロジェクト ( *.vbproj) ファイルに次の要素を追加する必要があります。To use the Private Protected access modifier, you must add the following element to your Visual Basic project (*.vbproj) file:

<PropertyGroup>
   <LangVersion>15.5</LangVersion>
</PropertyGroup>

詳細については、「Visual Basic 言語バージョンの設定」を参照してください。For more information see setting the Visual Basic language version.

アクセス修飾子Access Modifiers

アクセスレベルを指定するキーワードは、アクセス修飾子と呼ばれます。The keywords that specify access level are called access modifiers. 次の表は、アクセス修飾子を比較したものです。The following table compares the access modifiers:

アクセス修飾子Access modifier 付与されたアクセスレベルAccess level granted このアクセスレベルで宣言できる要素Elements you can declare with this access level この修飾子を使用できる宣言コンテキストDeclaration context within which you can use this modifier
Public 有無Unrestricted:

パブリック要素を参照できるすべてのコードは、それにアクセスできます。Any code that can see a public element can access it
インターフェイスInterfaces

モジュールModules

クラスClasses

構造体Structures

構造体のメンバーStructure members

手順Procedures

[プロパティ]Properties

メンバー変数Member variables

定数Constants

列挙Enumerations

イベントEvents

外部宣言External declarations

デリゲートDelegates
ソース ファイルSource file

NamespaceNamespace

インターフェイスInterface

モジュールModule

クラスClass

構造体Structure
Protected Derivational:Derivational:

保護された要素を宣言するクラスのコード、またはプロテクト要素から派生したクラスは、要素にアクセスできます。Code in the class that declares a protected element, or a class derived from it, can access the element
インターフェイスInterfaces

クラスClasses

構造体Structures

手順Procedures

[プロパティ]Properties

メンバー変数Member variables

定数Constants

列挙Enumerations

イベントEvents

外部宣言External declarations

デリゲートDelegates
クラスClass
Friend アセンブリ:Assembly:

フレンド要素を宣言するアセンブリ内のコードがそれにアクセスできるCode in the assembly that declares a friend element can access it
インターフェイスInterfaces

モジュールModules

クラスClasses

構造体Structures

構造体のメンバーStructure members

手順Procedures

[プロパティ]Properties

メンバー変数Member variables

定数Constants

列挙Enumerations

イベントEvents

外部宣言External declarations

デリゲートDelegates
ソース ファイルSource file

NamespaceNamespace

インターフェイスInterface

モジュールModule

クラスClass

構造体Structure
Protected FriendProtected Friend ProtectedFriendの和集合:Union of Protected and Friend:

同じクラスのコード、または保護された friend 要素と同じアセンブリ、または要素のクラスから派生した任意のクラス内のコードは、このコードにアクセスできますCode in the same class or the same assembly as a protected friend element, or within any class derived from the element's class, can access it
インターフェイスInterfaces

クラスClasses

構造体Structures

手順Procedures

[プロパティ]Properties

メンバー変数Member variables

定数Constants

列挙Enumerations

イベントEvents

外部宣言External declarations

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

含まれている型内のコードを含む、プライベート要素を宣言する型のコードは、要素にアクセスできます。Code in the type that declares a private element, including code within contained types, can access the element
インターフェイスInterfaces

クラスClasses

構造体Structures

構造体のメンバーStructure members

手順Procedures

[プロパティ]Properties

メンバー変数Member variables

定数Constants

列挙Enumerations

イベントEvents

外部宣言External declarations

デリゲートDelegates
モジュールModule

クラスClass

構造体Structure
Private Protected プライベートに保護された要素を宣言するクラスのコード、または bas クラスと同じアセンブリ内に存在する派生クラスのコード。Code in the class that declares a private protected element, or code in a derived class found in the same assembly as the bas class. インターフェイスInterfaces

クラスClasses

構造体Structures

手順Procedures

[プロパティ]Properties

メンバー変数Member variables

定数Constants

列挙Enumerations

イベントEvents

外部宣言External declarations

デリゲートDelegates
クラスClass

関連項目See also