カテゴリ: C# 更新日: 2025/07/29

C#のrefとoutキーワードとは?引数の参照渡しを理解しよう

C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう

先生と生徒の会話形式で理解しよう

生徒

「C#でメソッドに渡した変数の中身を変更することってできますか?」

先生

「いい質問ですね。C#ではrefoutというキーワードを使うと、引数を"参照渡し"で受け取って、呼び出し元の変数に直接影響を与えることができますよ。」

生徒

「えっ、普通はコピーされて渡されるんじゃないんですか?」

先生

「そうです、通常は"値渡し"なので元の変数には影響しません。でも、refoutを使えば、元の変数そのものを操作できるんです。詳しく見てみましょう!」

1. C#のrefとoutキーワードとは?

1. C#のrefとoutキーワードとは?
1. C#のrefとoutキーワードとは?

C#のrefとoutキーワードは、メソッドの引数を参照渡しで受け取るために使われる特別なキーワードです。通常、C#では引数は「値渡し」になります。つまり、メソッド内で変数を変更しても、呼び出し元には影響しません。

しかし、refやoutを使うことで、「引数のコピー」ではなく「元の変数」を渡すことができるようになります。これにより、メソッド内で引数に代入した値が呼び出し元の変数にも反映されるようになります。

2. refキーワードの使い方と特徴

2. refキーワードの使い方と特徴
2. refキーワードの使い方と特徴

refは「呼び出し元でも値が設定されている必要がある」キーワードです。つまり、refで渡す変数は、メソッドを呼び出す前に必ず初期化しておく必要があります。

以下はrefを使った基本的な例です。


void AddTen(ref int number)
{
    number += 10;
}

int x = 5;
AddTen(ref x);
Console.WriteLine(x); // 出力は15になる

実行結果:


15

このように、refを使うとメソッド内での変更が元の変数(この場合はx)に反映されます。

3. outキーワードの使い方と特徴

3. outキーワードの使い方と特徴
3. outキーワードの使い方と特徴

outは「呼び出し元では初期化しなくてよい」キーワードです。メソッドの中で必ず値を設定しなければなりません。

以下はoutを使ったサンプルです。


void SetValues(out int a, out int b)
{
    a = 100;
    b = 200;
}

int x, y;
SetValues(out x, out y);
Console.WriteLine($"x={x}, y={y}");

実行結果:


x=100, y=200

このように、outを使えば初期化していない変数でも、メソッド内で値をセットしてから使うことができます。

4. refとoutの違いを比較しよう

4. refとoutの違いを比較しよう
4. refとoutの違いを比較しよう

refとoutはよく似ていますが、明確な違いがあります。以下に表で整理してみましょう。

特徴 ref out
呼び出し前の初期化 必要 不要
メソッド内で値の設定 任意(しなくてもOK) 必須(設定しないとエラー)
目的 値を変更して戻す 値を返すための出力専用

5. refとoutを使う場面とは?

5. refとoutを使う場面とは?
5. refとoutを使う場面とは?

どちらのキーワードも、複数の値をメソッドから戻したいときや、メソッド内で変数の中身を変更したいときに便利です。

  • refは「現在の値を使い、その値を変更する」ような場合に適しています。
  • outは「メソッドから新しい値を返したい」場合に適しています。

例えば、文字列を数値に変換するint.TryParseメソッドでは、outキーワードが使われています。


string input = "123";
int number;
bool result = int.TryParse(input, out number);

if (result)
{
    Console.WriteLine($"変換成功!値は {number}");
}
else
{
    Console.WriteLine("変換に失敗しました。");
}

実行結果:


変換成功!値は 123

このように、outはとてもよく使われるキーワードで、C#の実用的なコードにも多く登場します。

6. 参照渡しのイメージを図でつかもう

6. 参照渡しのイメージを図でつかもう
6. 参照渡しのイメージを図でつかもう

初心者の方でもわかりやすいように、イメージ図で「値渡し」と「参照渡し」の違いを考えてみましょう。

  • 値渡し: コピーを渡す。元の箱は変わらない。
  • 参照渡し: 本物の箱を渡す。箱の中身を直接変える。

参照渡しでは、他の人が同じ箱を見ているので、誰かが中身を変えたらみんなに影響が出ます。

7. refとoutを使うときの注意点

7. refとoutを使うときの注意点
7. refとoutを使うときの注意点

便利なrefとoutですが、注意点もあります。

  • メソッドの使い方が複雑になるので、基本的には必要なときだけ使うようにしましょう。
  • 複数の戻り値が必要なときには便利ですが、クラスや構造体を使った設計の方がスマートな場合もあります。
  • メソッドの使い方が分かりづらくなるので、コメントや命名に注意して、わかりやすいコードを書くことが大切です。
カテゴリの一覧へ
新着記事
C#で複数ファイルをまとめて操作する方法(foreach・LINQ)をやさしく解説!
C#のインターフェースとは?クラス設計を柔軟にする基本技術
C#のコンストラクタの役割と使い方!オブジェクト初期化の基本
COBOLでデータベース接続を理解しよう!初心者でもわかる基本の考え方
人気記事
No.1
Java&Spring記事人気No1
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#で型を調べる方法!GetType()・typeof演算子の違いと使い方
No.3
Java&Spring記事人気No3
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
No.4
Java&Spring記事人気No4
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法