以下のコードにおいて、
Module Module1
Structure Seiseki
Dim kokugo, sugaku, eigo As Integer
Sub SetSeiseki(ByVal kamoku1 As Integer, ByVal kamoku2 As Integer, ByVal kamoku3 As Integer)
kokugo = kamoku1
sugaku = kamoku2
eigo = kamoku3
End Sub
Public Shared Operator +(ByVal x As Seiseki, ByVal y As Seiseki) As Seiseki
Dim z As Seiseki
z.kokugo = x.kokugo + y.kokugo
z.sugaku = x.sugaku + x.sugaku
z.eigo = x.eigo + y.eigo
Return z
End Operator
End Structure
Sub Main()
Dim a, b, c, gokei As Seiseki
a.SetSeiseki(70, 90, 80)
b.SetSeiseki(100, 77, 50)
c.SetSeiseki(92, 88, 95)
gokei = a + b + c
Console.WriteLine("学生aの国語={0,4} 数学={1,4} 英語={2,4}", a.kokugo, a.sugaku, a.eigo)
Console.WriteLine("学生bの国語={0,4} 数学={1,4} 英語={2,4}", b.kokugo, b.sugaku, b.eigo)
Console.WriteLine("学生cの国語={0,4} 数学={1,4} 英語={2,4}", c.kokugo, c.sugaku, c.eigo)
Console.WriteLine("3人の学生の国語の合計={0,4}", gokei.kokugo)
Console.WriteLine("3人の学生の数学の合計={0,4}", gokei.sugaku)
Console.WriteLine("3人の学生の英語の合計={0,4}", gokei.eigo)
Console.ReadLine()
End Sub
End Module
gokei = a + b + cのあとに
Public Shared Operator +(ByVal x As Seiseki, ByVal y As Seiseki) As Seisekiに
どうして移動していくのよくわかりません。
Functionステートメント、subステートメントのときは、プロシージャー名ですぐに分かるのですが・・・。
お忙しいとは思いますが、何卒宜しくご指導宜しくお願いします。
> Functionステートメント、subステートメントのときは、プロシージャー名ですぐに分かるのですが・・・。
> Public Shared Operator +(ByVal x As Seiseki, ByVal y As Seiseki) As Seiseki
オペレータ名が「+」となってますから、
> gokei = a + b + c
で、「Seiseki型」に対して、オペレータ「+」が実行されたときに、移動しるのでは・・・
http://msdn2.microsoft.com/ja-jp/library/hddt295a.aspx
これですね。
特定のクラスを含む演算子の動作を変更するためのものです。
たとえば,複素数型
Public Structure Complex
' 実装は省略
End Structure
を作ったとして,
Dim c1 As New Complex(1.0, 0.0), c2 As New Complex(0.0, 1.0), c3 As New Complex(1.0, 1.0)
を用意したとして,
Dim c4 As Complex = Complex.Divide(Complex.Add(c1, c2), c3)
や
Dim c4 As Complex = c1.Add(c2).Divide(c3)
と,
Dim c4 As Complex = (c1 + c2) / c3
を見比べると,後者の方が分かり易いですよね。
この時の,+や/の動作を決定するのが演算子プロシージャです。
あまり使わないものですが,数学的なライブラリではあると便利です。
# 今回の例ではちょっと疑問。普通,成績同士の和に意味はないので。
ご教授ありがとうございました。大変わかり易かったです。
編集 削除