VB.NETでは、クラス・関数・変数・定数を定義するときに、Public・Protected Friend・Protected・Friend・Private・Static・Shared・Dimの宣言を行います。
またこの他にも、Using・Catch・LINQを使用することもあります。
どれを用いるかによって、定義したものの有効範囲、寿命が変わってきます。
そのため、異なるクラスから参照する場合、同じクラスから参照する場合、派生クラスから参照する場合などに、適した指定を正しく行う必要があります。
よく使われる宣言の参照できる範囲は以下のようになります。
同じプロジェクト | 異なるプロジェクト | |||||
---|---|---|---|---|---|---|
他クラス | 派生クラス | 同じクラス | 他クラス | 派生クラス | ||
Public | ○ | ○ | ○ | ○ | ○ | |
Protected Friend | ○ | ○ | ○ | × | ○ | |
Protected | × | ○ | ○ | × | ○ | |
Friend | ○ | ○ | ○ | × | × | |
Private | × | × | ○ | × | × |
public はどこからでも参照できますが、private は同じプロジェクトの同じクラスからしか参照できないですね。
派生クラスとは、あるクラスを継承して作られた新しいクラスです。
このように、どの範囲で使用されるかによって正しく設定してやる必要があります。
正しく設定して、分かりやすくバグの少ないプログラミングを心がけましょう。
継承についても少しみていきましょう。
まず、基本クラスを作成してみます。
継承元の基本クラスを作成する際には、MustInheritを指定します。
Public MustInherit Class Class1
Public MustOverride Sub Sample()
End Class
こんな感じです。
MustInheritキーワードは、このクラスのインスタンスを作成することができないことを示しています。
そのため、このクラスを継承したクラスをインスタンス化して使用する必要があります。
また、MustOverrideキーワードでメソッドを定義していますが、これは必ず継承したクラスでオーバーライドをしなければいけないということです。
現在は中身がないので当たり前だとは思いますが、かならず継承により内容を与えなければ使うことはできません。
次に派生クラスを作成します。
Public Class Class2
Inherits Class1
Public Overrides Sub Sample()
Trace.WriteLine("test")
End Sub
End Class
Inherits を使用して基本クラスを指定します。
また、Overridesを使用して、先ほど「MustOverride」を使用して作成したメソッドをオーバーライドしています。
こんな感じで、カプセル化して使いやすいソースにしていきます。
私がプログラムを学び始めたころは、「全部publicで定義すればよいじゃん!」と思っていました。 (実際そうしていましたw)
適当に定義して、継承やカプセル化も行わずにプログラミングしても、その場では一応作り上げることはできます。
しかし、後からいろいろ問題がでてきます。
拡張していく中でソースが肥大化していき、とてもみにくくバグの生まれやすいソースが完成しちゃいます。
そうならないよう、その場限りの対応ではなく後々を考えたプログラムを組むよう心がけましょう。
その第一歩が、正しく宣言を設定することなのではないでしょうか。