C#のout修飾子で参照渡しを行う方法。ref修飾子との違いとは?
C#でメソッドの引数に、out修飾子やref 修飾子を使用すると、参照渡しで引数を渡すことができます。開発の現場で利用する機会が多い out修飾子とref修飾子を解説します。
- プログラマー
- そもそも参照渡しって何ですか?
- プロジェクト
マネージャー - 変数への参照(メモリ上のアドレス)を、メソッドの引数に渡すことを言います。メソッドの中で変数の値を変更すると、元の変数も変更されます。
out修飾子でメソッドの引数を参照渡し
C#のout 修飾子を使用して、メソッドの引数を宣言すると、変数の参照渡しができます。参照渡しをすると、メソッド呼び出し元の変数の値を、呼び出し先のメソッド中で変更できます。
具体的なコード例を見てみましょう。以下のサンプルコードは、引数で渡された2つの値を加算した結果を、outで宣言した変数に格納しています。
1
2
3
4
5
6
7
8
9
|
static void Main (string[] args) {
int ans;
Calc (2, 3, out ans);
Console.WriteLine (ans);
}
static void Calc(int i1, int i2, out int ans) {
ans = i1 + i2;
}
|
実行結果
out引数は呼び出し先メソッドで必ず初期化が必要
out修飾子を使用する際の注意点として、out修飾子の引数はメソッド内で必ず初期化(値の割り当てを)を行う必要があります。初期化を行なっていない場合、コンパイル時にエラーになります。
ref修飾子を使った参照渡し
out修飾子の他に、C#のref修飾子でもメソッドの引数を参照渡しすることが可能です。out修飾子とは異なり、ref修飾子は呼出元の変数の値を、読み取り/書き込みできます。また、refで宣言されたメソッドの引数に渡す変数は、必ず初期化する必要があります。
ref修飾子を使ったコードを見てみましょう。以下のサンプルコードは、引数で渡された変数に、2を加算するadd関数を、メイン関数から2回読んだ時の変数値の変化を見るコードです。
1
2
3
4
5
6
7
8
9
10
11
|
static void Main (string[] args) {
int ans = 0;
Add (ref ans);
Console.WriteLine (“1回目=” + ans);
Add (ref ans);
Console.WriteLine (“2回目=” + ans);
}
static void Add(ref int ans) {
ans = ans + 2;
}
|
ref修飾子とout修飾子の参照渡しの違い
ここまでの解説の通り、C#での参照渡には、out修飾子とref修飾子を使用する方法があります。では、どのような時に使い分けるのでしょうか。
ref修飾子とout修飾子の違いには、次の2つがあります。それぞれの特徴を理解し、適切な使い分けをしましょう。
-
- ・メソッド呼び出し元の変数の初期化
out修飾子 → 不要
ref修飾子 → 必須
-
- ・メソッド呼び出し先での変数の初期化(変数への値の割り当て)
out修飾子 →必須(必ず割り当てする必要あり)
ref修飾子 → 任意(どちらでもよい)
- プログラマー
- outとref修飾子の違い、使い分けの方法がよく分かりました。
- プロジェクト
マネージャー - outとref修飾子を使いこなせると便利ですから、使ってみてくださいね。
C#のoutとref修飾子を理解して効率的なプログラムを
C#のoutとref修飾子の使い方や、その違いについて解説してきました。参照渡しをマスターすると、より効率的なプログラムが書けるようになります。この記事を参考に是非覚えておいてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)