アクセシビリティとはローカル変数、フィールド(クラス・構造体のメンバ変数)、クラス、モジュールなどのアクセス範囲のことで、それらの要素を使用したり参照したりできる範囲をどの程度に限定するかということを指定します。

Sponsored Link

アクセス修飾子とアクセシビリティ

アクセシビリティを指定するためのものがアクセス修飾子で、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