web-dev-qa-db-ja.com

明確化のためだけに「ref」を使用しますか?

FillSomeData(ParameterData param, Result res)メソッドを作成しました。これは、resにデータを入力します(ラベルに記載されているとおり)。

Resultはクラスであり、構造体ではないため、FillSomeDataは実際にはresに影響します。

コードレビューの後、同僚が、メソッドがrefを変更することを明確にするためだけに、resをメソッドシグネチャに追加する(FillSomeData(ParameterData param, ref Result res)に変更する)ことを要求しました。

これはrefキーワードの意図ではなく、間違っていると思います。

そのような状況で一般的で推奨される方法は何ですか?

6
Yehuda Shapira

番号

refキーワードの意味を理解している人にとっては、これによってメソッドの実際の動作がわかりにくくなります。より良い代替策は、このようなメソッドのよりわかりやすい名前を選択することです

 FillSomeDataIntoResult(ParameterData param, Result res)

refの使用を回避することもできます。コードを変更して、書き込みを許可します。

 Result res=CreateResult(param)

または

 res.SomeData=CreateSomeData(param)

または

 res.InitSomeData(CreateSomeData(param)) 

もちろん、後者を可能な解決策にするために、fillコードやResultクラス、あるいはその両方を再構成する必要があるかもしれません。

25
Doc Brown