メソッドの定義

オブジェクト指向関連


overloads

・・・同じメソッド名を複数作成することができる。


このキーワードをつけなくてもオーバーロードしたメソッドは定義できるが、
可読性を考え付与したほうがよい。



shared

・・・インスタンスを作成してなくても呼び出し可能なメソッドを定義する。


以下、使用例

Share.vb

Public Class Share
    Public Shared Function getMessage()
        Return "Shareクラス"
    End Function
End Class

Form1.vb (テスト用ドライバ)

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
	'インスタンスを作成せずに呼び出し
        Console.WriteLine(Share.getMessage())

    End Sub
End Class

Overrides、Shadows


・・・どちらもオーバーライドする役割を持つが、Baseクラスで実行した場合は動作が異なる。
ShadowではBaseクラスで実行したときオーバーライドされない。


以下、実験結果。


BaseClass.vb (継承元となるクラス)

Public Class BaseClass

    Public Overridable Function getMessage()
        Return "Baseクラス"
    End Function

End Class


OverRide.vb

Public Class OverRide
    Inherits BaseClass

    Public Overrides Function getMessage()
        Return "OverRideクラス"
    End Function

End Class


Shadow.vb

Public Class Shadow
    Inherits BaseClass

    Public Shadows Function getMessage()
        Return "Shadowクラス"
    End Function

End Class


Form1.vb (テスト用ドライバ)

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        '普通に実行した場合
        Dim clsOverRide1 As New OverRide
        Dim clsShadow1 As New Shadow

        Console.WriteLine(clsOverRide1.getMessage)      '出力結果 "OverRideクラス"
        Console.WriteLine(clsShadow1.getMessage)        '出力結果 "Shadowクラス"   ←Shadowsのメソッドが動作している

        'Baseクラスに継承したクラスをセット
        Dim clsOverRide2 As BaseClass = New OverRide
        Dim clsShadow2 As BaseClass = New Shadow

        Console.WriteLine(clsOverRide2.getMessage)      '出力結果 "OverRideクラス"
        Console.WriteLine(clsShadow2.getMessage)        '出力結果 "Baseクラス"     ←Shadowsのメソッドが動作していない

    End Sub
End Class


○アクセスビリティ


Public
・・・どこからでも参照可能


Private
・・・他からの参照不可


Protected
・・・派生クラスから参照が可能


Friend
・・・同じプロジェクト内で参照可能


Protected Friend
・・・Protected + Friend




○メモ


Optional

・・・引数の省略可能。ただしVB.NETの機能でC#には無い。





サンプルコードの動作確認環境


VS2005
.NetFrameWork 2.0