outキーワードによる出力引数

参照渡し - C# によるプログラミング入門 | ++C++; // 未確認飛行 C


初期化して無い変数を関数等に渡そうとするとコンパイルエラーがでます。

using System;

class CClass {
    public string str;
}

class Program {
    static void Foo(CClass cobj) {
        cobj = new CClass { str = "foo" };
        Console.WriteLine(cobj.str);
    }
    
    static void Main() {
        CClass cobj; // 初期化して無い
        
        // 初期化してないのにcobjを渡そうとすると・・・
        Foo(cobj);
    }
}
$ csc main.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

main.cs(12,10): error CS0818: 暗黙的に型指定されたローカル変数を初期化しなければなりません

これを「Foo関数の中でcobj初期化するので渡すの許可させて!」と、宣言するためにoutキーワードを用います。

using System;

class CClass {
    public string str;
}

class Program {
    // ここで初期化するから許して!
    static void Foo(out CClass cobj) {
        cobj = new CClass { str = "foo" };
        Console.WriteLine(cobj.str);
    }
    
    static void Main() {
        CClass cobj; // 初期化して無い
        
        // Fooの中で初期化するから渡させて!
        Foo(out cobj);
    }
}
$ main
foo

となります。