ステップアップ Visual Basic 「演算子のオーバーロード」
演算子のオーバーロードとは?
演算子について独自の演算操作を定義する実装方法です。この方法を用いると、独自に定義したクラスや構造体に対して、普段見慣れている"+"などの演算子を独自の演算操作のための演算子として利用できるようになります。
Public Shared その他修飾子 Operator 演算子(演算対象リスト) As 演算結果の型 End Operator
"Public"と"Shared"の2つの修飾子は必須です。
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Click Dim amount1 As New MedievalYen(3, 2) Dim amount2 As New MedievalYen(1, 3) Dim amount3 = amount1 + amount2 amount1.Dump(ListBox1.Items) amount2.Dump(ListBox1.Items) amount3.Dump(ListBox1.Items) amount3 += New MedievalYen(1, 2) amount3.Dump(ListBox1.Items) End Sub End Class Public Class MedievalYen Public Property Ryou As Integer ' 両 Public Property Bu As Integer ' 分 ' コンストラクタ Public Sub New(ByVal r As Integer, ByVal b As Integer) Ryou = r Bu = b End Sub Public Overridable Sub Dump(ByVal target As IList) target.Add( String.Format("[MedievalYen] {0} 両 {1} 分", Ryou, Bu)) End Sub Public Shared Operator +(ByVal op1 As MedievalYen, ByVal op2 As MedievalYen) As MedievalYen Dim workRyo As Integer Dim WorkBu As Integer workRyo = op1.Ryou + op2.Ryou WorkBu = op1.Bu + op2.Bu workRyo += (WorkBu \ 4) ' 両へ繰り上げ計算 WorkBu = WorkBu Mod 4 ' 端数のみ分にする Return New MedievalYen(workRyo, WorkBu) End Operator End Class
"+"演算子などの演算操作があると、コンパイラは演算対象となる項目の数や型から、呼び出し可能な演算子の有無を確認します。
また、注意点として、演算子のオーバーロードとして実装したメソッド本体は、クラスや構造体の構成メンバになりますが、引数または戻り値のいずれかに最低1個の型はそのクラスや構造体でなければなりません。