VB.NETのクラスメンバのアクセス修飾子のサンプルです。
確認環境 ・Microsoft Visual Studio Community 2019 |
目次
説明 | クラスメンバのアクセス修飾子 |
サンプル | 確認環境 |
メソッドにアクセス修飾子をつけたクラス(Color.vb) | |
起動するファイル(vb1.vb) | |
別プロジェクトのクラスを使用するクラス(TestClass.vb) |
クラスメンバのアクセス修飾子
クラスメンバのアクセス修飾子です。
項目 | 説明 |
---|---|
Public | 別のプロジェクトまたは同じプロジェクトからアクセス可能 |
Friend | 同じプロジェクトからアクセス可能 |
Protected | 1.派生クラス(子クラス)からアクセス可能 →他プロジェクトからも可能 2.同じクラスからアクセス可能 |
Protected Friend | 1.派生クラス(子クラス)からアクセス可能(Protected) →他プロジェクトからも可能 2.同じプロジェクトからアクセス可能(Friend) |
修飾子なし | 別のプロジェクト、同じプロジェクトからアクセス可能 |
Private | 同じクラスからアクセス可能 |
アクセス修飾子は、アクセスの範囲を限定します。(スコープを狭める)
範囲が限定されていると、修正時に影響する範囲が狭まり修正しやすくなります。
プロジェクトは、アセンブリとも呼ばれます。
以下は、MicrosoftのVisual Basicでのアクセスレベルのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/language-features/declared-elements/access-levels
確認環境
プロジェクトが2つあります。vb1とvb2です。
Color.vbにアクセス修飾子をつけたメソッドがあります。
TestClass.vb内には、Color.vbにあるクラスを継承したクラスと継承していないクラスがあります。
vb1.vbは、TestClass.vb内のクラスを生成して実行します。
メソッドにアクセス修飾子をつけたクラス(Color.vb)
それぞれにアクセス修飾子をつけています。
Public、Protected Friend、Protected、Friend、なし、Privateがあります。
Public Class Color
'Public
Public Sub GetName1()
Console.WriteLine("赤:Public") '
End Sub
'Protected Friend
Protected Friend Sub GetName2()
Console.WriteLine("黄:Protected Friend") '
End Sub
'Protected
Protected Sub GetName3()
Console.WriteLine("青:Protected") '
End Sub
'Friend
Friend Sub GetName4()
Console.WriteLine("緑:Friend") '
End Sub
'なし
Sub GetName5()
Console.WriteLine("白:なし") '
End Sub
'Private
Private Sub GetName6()
Console.WriteLine("黒:Private") '
End Sub
End Class
起動するファイル(vb1.vb)
TestClass.vb内のクラスを生成して実行します。
Module vb1
Sub Main()
Dim t1 As New TestClass1
t1.Write1()
Dim t2 As New TestClass2
t2.Write2()
End Sub
End Module
別プロジェクトのクラスを使用するクラス(TestClass.vb)
別プロジェクトのクラスを使用するクラスです。
TestClass1は、Colorクラスのインスタンスを生成して実行しています。
TestClass2は、Colorクラスを継承しているのでインスタンスの生成はしていません。
Imports vb2
Public Class TestClass1
Public Sub Write1()
Dim p1 As New Color
p1.GetName1() '赤:Public
'p1.GetName2() 'コンパイルエラー
'p1.GetName3() 'コンパイルエラー
'p1.GetName4() 'コンパイルエラー
p1.GetName5() '白:なし
'p1.GetName6() 'コンパイルエラー
End Sub
End Class
Public Class TestClass2
Inherits vb2.Color
Public Sub Write2()
GetName1() '赤:Public
GetName2() '黄:Protected Friend
GetName3() '青:Protected
'GetName4() 'コンパイルエラー
GetName5() '白:なし
'GetName6() 'コンパイルエラー
End Sub
End Class
別プロジェクトのクラスのインスタンスを生成した場合は、
publicとアクセス修飾子なしが実行できました。
それ以外は、コンパイルエラーです。
別プロジェクトのクラスを継承していた場合は、
publicとProtected FriendとProtectedとアクセス修飾子なしが実行できました。
それ以外は、コンパイルエラーです。
関連の記事
VB.NET入門 クラスの仕組みとサンプル
VB.NET クラスの継承の仕組みとサンプル
VB.NET コンストラクタのサンプル
VB.NET メソッドのサンプル(値渡し/参照渡し他)