今回は、僕が今まで見たこともない参照パラメーターと出力パラメーターについてです。
今までC、Java、アセンブラとやってきましたがこんなの初めて見ました。
けど、内容的には簡単な感じです。
特にC言語をやっていてポインタをちゃんと理解しているならかなり理解はしやすいし、何より便利に感じるはずです。
参照パラメーター修飾子refは、通常値渡しによってメソッドを実行するところを参照渡しにできるものです。
つまり、ポインタ変数とか面倒な変数を呼び出す必要がない感じですね。
refの使い方は単純に、メソッドを定義する際にパラメータの変数の型の前にrefを加えるだけです。
また、メソッドを呼び出すときにも変数の前にrefを付けます。
これだけで値渡しから参照渡しのメソッドを実行することができます。
んで、注意点として「refを使って渡す引数には、呼び出しの前に値を代入しておかなければならない」とあるのですが、
これは当たり前のような感じもします。まぁ、入れるものなけりゃ0を入れときゃいい話ですよね。
お次、出力パラメータ修飾子outについて。ケースとしては「参照渡しの引数を使ってメソッドから値を受け取りたいが、値を渡したくはない」というもの。
メソッドのパラメーターとして変数をセットはするけど、それは値を渡すためではなく値を受け取るため・・・・・ということでしょうかね。
さきほどやったref修飾子では「渡す引数には、呼び出し前に値を代入しておかないといけない」という約束事があったのでrefは使えませんよね。
そんなときには出力パラメータ修飾子outの出番というわけです!!
なんとこれは、メソッドのパラメータとしてセットした変数の値を処理終了後も保持している状態にしてくれるものです。
通常の値渡しではこんなことはできないですよね。パラメータとしてセットした変数に変更が加えられていたとしても、メソッドの処理が終了してしまうとその変数はメソッドの処理開始前の値に戻ってしまいますから。
んで、return文とかが最後にあると演算結果とかを返してくれるという感じですよね。
パラメーターとして指定した変数に変更を加えられる方法というのは案外少ないんですよね。僕も関数とかメソッドを使うときのパラメーターの認識としては「演算に必要な要素」という感じでしたから。
んで、out修飾子の使い方もrefと同じで、値を入れたいパラメーターの型の前にoutを加えるだけ。
そして、パラメーターをセットするときにはその変数には値をあらかじめ格納する必要があるのですが、out修飾子が付いているパラメーターにはそんなこと必要ありません。なぜならメソッド内で値を格納してくれるから。
逆にいうと、メソッド内でout修飾子のついたパラメーターに指定した変数については、メソッド内でその変数に値を代入する処理を加えないといけないということです。
説明はまだまだ下手糞だし、用語もちゃんとつかいこなせていないっぽいけど、それもそのうち。ゆっくりやっていこうと思います。
しかし、C#の機能というのは結構面白いものが多いですね。
これからインデクサーとかプロパティとかあるのでそこが結構楽しみだったり!
今日の勉強メモはこんな感じで。