Uz Galaxy - Info Archive top BBS   RSS
Info Archive  VB.NET - 仮想関数 と 純仮想関数  

■ 仮想関数 Overridable
オーバーライドが可能な関数として関数を宣言する。
    Class Man
        Public Overridable Function SayHallo()
            Console.WriteLine("...")
        End Function
    End Class

    Class Japanese
        Inherits Man

        Public Overrides Function SayHallo()
            Console.WriteLine("こんにちは")
        End Function
    End Class


■ 純仮想関数 MustOverride
オーバーライドが可能な関数で、継承したクラスに必ず実装させる関数として関数を宣言する。
    MustInherit Class Man
        Public MustOverride Function SayHallo()
    End Class

    Class Japanese
        Inherits Man

        Public Overrides Function SayHallo()
            Console.WriteLine("こんにちは")
        End Function
    End Class


純仮想関数をメンバに持つクラスは、インスタンスを作成することはできない。
しかし、参照変数として用意し、派生したクラスを格納できる。
リスト1のように Man 型で宣言した変数に、異なる派生クラスを格納し、
同じメソッドの呼び出しで、それぞれのクラスによる異なった処理を行うことができる。
リスト1
Module Module1

    MustInherit Class Man
        Public MustOverride Function SayHallo()
    End Class

    Class Japanese
        Inherits Man

        Public Overrides Function SayHallo()
            Console.WriteLine("こんにちは")
        End Function
    End Class

    Class American
        Inherits Man

        Public Overrides Function SayHallo() As Object
            Console.WriteLine("Hello")
        End Function
    End Class

    Sub Main()
        Dim man(2) As Man
        man(0) = New Japanese
        man(1) = New American

        man(0).SayHallo()
        man(1).SayHallo()

        Console.WriteLine("Enterキーで終了します。")
        Console.Read()
    End Sub

End Module
出力結果
こんにちは
Hello
Enterキーで終了します。

参照
C#の場合はこちら

Copyright © 2004 Uz. All rights reserved.
http://uzgalaxy.com/
このページはInfoArchiveで作成されています。