今回は、僕にとっては初めて見る演算子のオーバーロードというものです。
意味的にはメソッドのオーバーロードと同じです。けど、少しオーバーロードの方法は違いますよぉ、って感じです。
演算子のオーバーロードの時には、メソッドの時のメソッド名のところにおいて、「operator 演算子」という形をして後は仮引数をとるという感じです。
もちろん、単項演算子の場合にはパラメータは1つになり、二項演算子の場合にはパラメータは2つになります。
そして、演算子のオーバーロードの時の注意事項が以下の通りです。
・単項演算子の場合はパラメータの型は、それを定義したクラスの型と同じにしなければならなく、二項演算子の場合では、2つのうちのいずれかのパラメータの型がそれを定義したクラスの型と同じである必要がある。
まぁ、この本のサンプルコードを打っていていも、「クラスメンバである変数の演算をまとめてやるために、演算子のオーバーロードというのが使われているのかな」と思いました。特に座標の計算とかには本当に便利そうです。サンプルコードにもあった通りです。
+とか-のふつうの演算子では、「まずはインスタンスのメンバにアクセスして、そっから演算をして・・・・」という風に処理が結構面倒であるのは確かです。そんなときにこれを使うということでしょうね。
んで、パラメータには約束事がありましたが、戻り値のほうにはないのかというと、・・・・・ないみたいです。ただ、戻り値はその演算子のオーバーロードを定義したクラスを指定するというのが一般的なようです。
また、パラメータにはrefおよびoutは使えないらしいです。
んで、演算子をオーバーロードした後なのですが、さてどうやって使うのでしょうか?答えは、いつもどおりに演算子を使えばいいだけです。ただ、オーバーロードしたパラメータに合致するような変数の型の組み合わせが来たときにはこのオーバーロードした演算子の出番というわけですね。だから、本当にメソッドのオーバーロードと同じように考えていても問題はないようです。むしろ、「演算子だからなにか違うのかな・・・」と深読みしすぎるのはいけないという感じですね。ここでは素直に考えていきましょう。
そして、注意事項というわけではないですが重要なこと。演算子をオーバーロードする際にはその演算子の意味を自由に変化させることができますが、もともとの演算子の意味を大きく逸脱するようなオーバーロードはしないべきということです。これは以前にメソッドのオーバーロードのときにも同じようなことを書いたと思います。
今回はこんな感じかな。演算子のオーバーロードということで結構難しく考えていましたが、よくよく考えてみたらそんなんでもないなと実感しました。このあともちゃんと考えてC#プログラミングを身につけたいと思います。