out (C# リファレンス)

更新 : 2007 年 11 月

out キーワードを使用すると、引数が参照渡しされます。これは ref キーワードに似ていますが、ref の場合は、変数を初期化してから渡す必要があります。out パラメータを使用するには、メソッド定義と呼び出し元のメソッドの両方で out キーワードを明示的に使用する必要があります。次に例を示します。

class OutExample
{
    static void Method(out int i)
    {
        i = 44;
    }
    static void Main()
    {
        int value;
        Method(out value);
        // value is now 44
    }
}

out 引数として渡す変数は、渡す前に初期化する必要はありませんが、呼び出されたメソッドでは、メソッドから制御を戻す前に値を代入する必要があります。

ref キーワードと out キーワードの取り扱い方は、実行時は異なりますが、コンパイル時は同じです。そのため、2 つのメソッドのうち一方が ref 引数を受け取り、もう一方が out 引数を受け取る場合、これらのメソッドはオーバーロードできません。これら 2 つのメソッドは、たとえば、コンパイルの観点からは同じメソッドになるので、次のコードはコンパイルされません。

class CS0663_Example
{
    // Compiler error CS0663: "Cannot define overloaded 
    // methods that differ only on ref and out".
    public void SampleMethod(out int i) { }
    public void SampleMethod(ref int i) { }
}

ただし、一方のメソッドが ref 引数または out 引数を受け取り、もう一方のメソッドがどちらの引数も使用しない場合は、オーバーロードを実行できます。この例を次に示します。

class OutOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(out int i) { i = 5; }
}

プロパティは変数ではないので、out パラメータとして渡すことができません。

配列を渡す方法については、「ref と out を使用した配列の引き渡し (C# プログラミング ガイド)」を参照してください。

使用例

out メソッドを宣言すると、メソッドが複数の値を返すようにする場合に便利です。out パラメータを使用するメソッドは、戻り値の型 (「return」を参照) として変数にアクセスできますが、呼び出し元のメソッドに 1 つ以上のオブジェクトを out パラメータとして返すこともできます。out を使用して、1 回のメソッド呼び出しで 3 つの変数を返す例を次に示します。この例では、3 番目の引数に null が代入されます。このようにして、メソッドからオプションで値を返すことができます。

class OutReturnExample
{
    static void Method(out int i, out string s1, out string s2)
    {
        i = 44;
        s1 = "I've been returned";
        s2 = null;
    }
    static void Main()
    {
        int value;
        string str1, str2;
        Method(out value, out str1, out str2);
        // value is now 44
        // str1 is now "I've been returned"
        // str2 is (still) null;
    }
}

C# 言語仕様

詳細については、「C# 言語仕様」の次のセクションを参照してください。

  • 5.1.6 出力パラメータ

  • 10.6.1.3 出力パラメータ

参照

概念

C# プログラミング ガイド

参照

C# のキーワード

メソッドのパラメータ (C# リファレンス)

その他の技術情報

C# リファレンス