2010年2月15日月曜日

[.NET]refとoutと値渡し

私は、VOではない引数を更新するインタフェースがキライです。とくにVB.NETで、ByRefを見かけるとイラっときます。というのも、実行結果はメソッドの戻り値である。という考え方をするからです(あくまで個人的見解です)。値更新の流れを1方向にすることにより、全体的に見通しがよくなる気がします(あくまで個人的見解です)。

しかし、参照渡しと値渡しの違いはわかるんですが、refとoutの違いがよくわかっていませんでした。というわけでちょっと調べてみました。私の理解では以下のとおりです。

 ref:C++でいう参照渡し。呼び出し側でインスタンス生成する必要がある
 out:C++でいうポインタ渡し。呼び出し側でインスタンスの生成が不要

メリットとしては、値渡しの場合、コピーのコストが発生する場合があります(値型の場合だけだっけか?)そういう場合は効果があるかもしれません。
データは汚れるかもしれませんが、基本的にポインタ的な情報のやり取りになるはずなので。

0 件のコメント: