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
となります。