C#のoutおよびrefキーワードの使い方

C#では、メソッドに引数を渡す際に特別な役割を持つoutおよびrefキーワードがあります。これらのキーワードを使うことで、メソッド内で引数の値を変更し、その変更をメソッドの外でも反映させることができます。本資料では、それぞれのキーワードの使い方と違いについて説明します。

ref キーワード

概要

refは、変数を参照渡しするために使います。これにより、メソッド内で変数の値を変更すると、その変更が呼び出し元にも反映されます。refを使用する場合、呼び出し元で変数は初期化されている必要があります。

使用例

using System;

class Program
{
    static void Main()
    {
        int number = 10;
        Console.WriteLine("Before method call: " + number);

        ChangeValue(ref number);

        Console.WriteLine("After method call: " + number);
    }

    static void ChangeValue(ref int num)
    {
        num = 20;
    }
}

説明

この例では、numberの値は最初10ですが、ChangeValueメソッド内で20に変更されます。その結果、メソッド呼び出し後のnumberの値は20になります。

実行結果

Before method call: 10
After method call: 20

ポイント

  • refを使う場合、呼び出し元で変数を初期化しておく必要があります。
  • メソッド内での変更は、呼び出し元にも反映されます。

out キーワード

概要

outは、変数を参照渡しする点ではrefと似ていますが、いくつかの違いがあります。outを使用する場合、呼び出し元で変数を初期化する必要はありません。しかし、メソッド内でその変数に必ず値を設定する必要があります。

使用例

using System;

class Program
{
    static void Main()
    {
        int result;
        CalculateSum(5, 10, out result);

        Console.WriteLine("Sum: " + result);
    }

    static void CalculateSum(int a, int b, out int sum)
    {
        sum = a + b;
    }
}

説明

この例では、resultは初期化されていませんが、CalculateSumメソッド内で値が設定されます。メソッド呼び出し後、resultの値は15になります。

実行結果

Sum: 15

ポイント

  • outを使う場合、呼び出し元で変数を初期化する必要はありません。
  • メソッド内で必ず変数に値を設定する必要があります。

違いのまとめ

  • ref: 変数は呼び出し元で初期化されている必要があります。メソッド内で変更された値は呼び出し元にも反映されます。
  • out: 変数は呼び出し元で初期化されている必要はありませんが、メソッド内で必ず値が設定されます。

実際の使いどころ

refの使いどころ

  • 既存の変数の値を変更したい場合に使用します。
  • 例: メソッド内で計算結果を直接変更する場合。

outの使いどころ

  • メソッドから複数の値を返したい場合に使用します。
  • 例: メソッド内で計算を行い、その結果を引数として返す場合。

C#

Posted by hidepon