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.

PublicPublic

宣言ステートメント内の 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. つまり、Public 要素は、ソース ファイルまたは名前空間のレベルで、またはインターフェイス、モジュール、クラス、または構造体の内部で宣言できますが、プロシージャ内では宣言できません。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.

ProtectedProtected

宣言ステートメントの 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. つまり、Protected 要素はクラスで宣言できますが、ソース ファイルまたは名前空間のレベル、またはインターフェイス、モジュール、構造体、またはプロシージャの内部では宣言できません。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. つまり、Friend 要素は、ソース ファイルまたは名前空間のレベルで、またはインターフェイス、モジュール、クラス、または構造体の内部で宣言できますが、プロシージャ内では宣言できません。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. つまり、Protected 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.

PrivatePrivate

宣言ステートメントの 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. つまり、Private 要素はモジュール、クラス、または構造体内で宣言できますが、ソース ファイルまたは名前空間のレベル、インターフェイス内、またはプロシージャ内では宣言できません。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:

Public 要素を参照できるすべてのコードが、これにアクセスできます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

名前空間Namespace

InterfaceInterface

ModuleModule

クラスClass

構造体Structure
Protected 派生:Derivational:

Protected 要素を宣言するクラス、またはそこから派生したクラスのコードが、要素にアクセスできます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:

Friend 要素を宣言するアセンブリ内のコードが、これにアクセスできます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

名前空間Namespace

InterfaceInterface

ModuleModule

クラスClass

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

Protected 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:

含まれている型内のコードを含む、Private 要素を宣言する型のコードが、要素にアクセスできます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
ModuleModule

クラスClass

構造体Structure
Private Protected Private Protected 要素を宣言するクラスのコード、または基底クラスと同じアセンブリ内に存在する派生クラスのコード。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