[解決済み] in vs ref vs out の使い分け
2022-03-23 09:41:59
質問
先日、ある方から「パラメータキーワードはいつ使えばいいのか」という質問を受けました。
out
ではなく
ref
. の違いは理解している(と思う)のですが。
ref
と
out
キーワード(これまで
前に質問した
) と説明するのがベストのようです。
ref
==
in
と
out
を常に使用すべき(仮定またはコード)例は何ですか?
out
であって
ref
.
以来
ref
はより一般的なものです。
out
? 単なる構文解析なのか?
どのように解決するのですか?
を使用する必要があります。
out
が必要な場合を除き
ref
.
データを別のプロセスなどにマーシャルする必要がある場合、大きな違いとなり、コストがかかる可能性があります。そのため、メソッドが初期値を使用しない場合は、初期値をマーシャルしないようにしたいものです。
さらに、宣言や呼び出しの読み手に対して、初期値が重要なのか(保存される可能性があるのか)、捨てられるのかを示すことができます。
細かい違いとして、outパラメータは初期化する必要がありません。
の例
out
:
string a, b;
person.GetBothNames(out a, out b);
GetBothNamesが2つの値をアトミックに取得するメソッドである場合、aやbが何であれ、このメソッドは動作を変更しない。もし、ハワイのサーバーに呼び出された場合、ここからハワイに初期値をコピーするのは帯域の無駄遣いです。ref.を使った同様のスニペット
string a = String.Empty, b = String.Empty;
person.GetBothNames(ref a, ref b);
は、a と b の初期値が関係しているように見えるので、読者を混乱させる可能性があります (メソッド名からはそうではないことがわかりますが)。
の例
ref
:
string name = textbox.Text;
bool didModify = validator.SuggestValidName(ref name);
ここでは、初期値がメソッドに関連しています。
関連
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] async」と「await」の使い方とタイミング
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] LINQで.Firstと.FirstOrDefaultを使用するタイミングは?
-
[解決済み】C#の参照型変数の "ref "の使い方は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?