なんかきもちわるい

普通関数を書く場合は

function hogehoge(foo){
  return foo;
}

とかなんとか書いて、返り値を受け取るときは

hoge = hogehoge("aho");

ってな感じで受け取るよね。そんな固定観念が自分にはある。
最近仕事でC#をいじり始めたんで、色んなソースを見比べたんだけど、人によって変わった受け取り方をしている。
下の様な感じ。

private int hogehoge(ref string hoge){
  hoge = "文字が入るよ";
  return i;
}

この引数にrefと書くと呼び出し元にも影響できるようで

string foo;
int ret = hogehoge(ref foo);

と渡すと、retにもfooにも値が入るみたい。貰ったサンプルソースにこんな書き方が多用されていたので驚いた。もしかしたら熟練者には当たり前に使っているものなのかもしれない。
確かに複数の戻り値が欲しい時なんかに手っ取り早く使えるけど、なんかしっくりこないんだよなあ。