アクセシビリティとはローカル変数、フィールド(クラス・構造体のメンバ変数)、クラス、モジュールなどのアクセス範囲のことで、それらの要素を使用したり参照したりできる範囲をどの程度に限定するかということを指定します。
アクセシビリティを指定するためのものがアクセス修飾子で、PublicやPrivateなどのキーワードがアクセス修飾子にあたります。 次の表は、各アクセス修飾子とその概要、適用できる要素をまとめたものです。
| アクセス修飾子 | 適用した場合のアクセシビリティ | 適用できる対象 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 名前空間 | クラス | 構造体 | モジュール | クラスメンバ | 構造体メンバ | モジュールメンバ | ローカル変数 | ||
| Public | 同じプロジェクト、他のプロジェクトからのアクセスが可能 | ○ | ○ | ○ | ○ | ○ | ○ (デフォルト) |
○ | × |
| Protected | 同じクラス、そのクラスの派生クラスからのアクセスのみ可能 | × | × | × | × | ○ | × | × | × |
| Friend | 同じプロジェクトからのアクセスのみ可能 | ○ (デフォルト) |
○ (デフォルト) |
○ (デフォルト) |
○ (デフォルト) |
○ | ○ | ○ | × |
| Protected Friend | 同じプロジェクト、同じクラス、派生クラスのいずれからもアクセス可能 | × | × | × | × | ○ | × | × | × |
| Private | 同じモジュール、クラス、または構造体からのみアクセス可能 | × | ○ | ○ | ○ | ○ (デフォルト) |
○ | ○ (デフォルト) |
× |
| Dim | アクセス修飾子ではないが、フィールド・変数の宣言の際に使用できる | × | × | × | × | ○ | ○ | ○ | ○ |
この表で、デフォルトと書いてある箇所は、アクセス修飾子を指定しなかった場合のアクセシビリティです。 つまり、アクセス修飾子を指定しない場合、名前空間・クラス・構造体・モジュールのアクセシビリティはFriend、クラス・モジュールのメンバはPrivate、構造体のメンバはPublicになります。
次のサンプルはアクセス修飾子の適用例を、クラスを中心に記述したものです。 詳細はコメントにあるとおりです。
Class SampleClass ' このフィールドはこのクラス内でのみ有効 Dim dimField As Integer ' このフィールドはこのクラス内でのみ有効 Private privateField As Integer ' このフィールドはこのクラス内と派生クラスでのみ有効 Protected protectedField As Integer ' このフィールドはこのクラスの内外で有効 Public publicField As Integer ' このメソッドはこのクラス内でのみ有効です Private Sub PrivateMethod() End Sub ' このメソッドはこのクラス内と派生クラスでのみ有効 Protected Sub ProtectedMethod() End Sub ' このメソッドはこのクラスの内外で有効です Public Sub PublicMethod() End Sub End Class Class DerivedClass ' SampleClassを継承します Inherits SampleClass Sub SampleMethod() ' これらのフィールドにはアクセス可能 protectedField = 0 publicField = 0 ' これらのメソッドにはアクセス可能 ProtectedMethod() PublicMethod() End Sub End Class Module MainModule Sub Main() Dim x As New SampleClass() ' このフィールドにはアクセス可能 x.publicField = 0 ' このメソッドにはアクセス可能 x.PublicMethod() End Sub End Module