Public Class Form1
'------------------------------------------------------------------
'インターフェイス(クラスの設計図)を使ったポリモーフィズム(多様性)
'インターフェイス家の寓話
'あるのは家訓だけ。
'ごりごりと、全て自分でやりなさい!
'成功すれば、いつでも叩き上げの殿様になれます!
Public Interface MyInterface
'これが設計図となる
'このインターフェイスを使用して、つまり窓口にして、
'色々な機能=(VBMsg、mCalcu、の中身を実装したクラス)をとっかえひっかえ使用できるようになる。
Sub VBMsg(ByVal moji As String)
Function mCalcu(ByVal x As Integer) As Integer
End Interface
Public Class Poly1
Implements MyInterface
Public Function mCalcu(ByVal x As Integer) As Integer Implements MyInterface.mCalcu
'単に100倍する計算
Return x * 100 '100倍にできました!
End Function
Public Sub VBMsg(ByVal moji As String) Implements MyInterface.VBMsg
MessageBox.Show(moji & "単に100倍する計算", "新機能でもないけど新機能です。", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
End Class
Public Class Poly2
Implements MyInterface
Public Function mCalcu(ByVal x As Integer) As Integer Implements MyInterface.mCalcu
'単に1000倍する計算
Return x * 1000 '1000倍にできました!
End Function
Public Sub VBMsg(ByVal moji As String) Implements MyInterface.VBMsg
MessageBox.Show(moji & "単に1000倍する計算", "新機能でもないけど新機能です。", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
End Class
Sub UsePoly(ByVal Myin As MyInterface, ByVal str As String, ByVal int As Integer)
Myin.VBMsg(str)
Debug.WriteLine(Myin.mCalcu(int))
End Sub
Sub TestUsePoly()
'成功すれば、いつでも叩き上げの殿様になれます!
'はたしてどちらが・・・・?
Dim in1 As New Poly1
Dim in2 As New Poly2
Call UsePoly(in1, "一個目", 5)
Call UsePoly(in2, "二個目", 5)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'実際に使ってみましょう!
TestUsePoly()
End Sub
'--------------------------------------------
'継承(親の七光)を使ったポリモーフィズム(多様性)
'継承王国の寓話。
'昔々「継承王国」に王様と、二人の王子が居ました。
'二人の王子は消費税について全く違った意見を持っていました。
'国民はどちらがなっても、すぐに交代できるように、かつ
'王様が今まで持っていたものはそのまま使えるようにと、願いました。
Public Class Oya
Overridable Function mCalcu(ByVal x As Integer) As Integer
Return x * 0.05 '親(王様)は消費税5パーセントに設定していましたが・・・
End Function
Overridable Sub VBMsg(ByVal moji As String)
MessageBox.Show(moji & "これは別段いじらなくても子は誰でも使える", "新機能でもないけど・・・", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
End Class
Public Class Ko1
Inherits Oya
Overrides Function mCalcu(ByVal x As Integer) As Integer
Return x * 0.09 '第二王子は消費税を9パーセントまで上げます。
End Function
End Class
Public Class Ko2
Inherits Oya
Overrides Function mCalcu(ByVal x As Integer) As Integer
Return x * 0.03 '第一王子は消費税を3パーセントまで下げます。
End Function
End Class
Sub UseKo(ByVal cl As Oya, ByVal str As String, ByVal x As Integer)
'国の法律では、どちらの王子が王様になってもよい事になっています。
cl.VBMsg(str)
Debug.WriteLine(cl.mCalcu(x))
End Sub
Sub TestUseko()
'国民は、どちらの王子を王様とするか、テストすることにしました。
'また、いつでも交代できるようにしておきました。
Dim k1 As New Ko1
Dim k2 As New Ko2
Call UseKo(k1, "ko1で一行も書かなくても、親の機能だから使えます。", 100)
Call UseKo(k2, "ko2で一行も書かなくても、親の機能だから使えます。", 100)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'実際にやってみましょう!
Call TestUseko()
End Sub
End Class
|