out パラメーター修飾子 (C# リファレンス)
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 引数を受け取るという点以外に違いがない場合、これらのメソッドはオーバーロードできません。たとえば、次のコードはコンパイルされません。
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# プログラミング ガイド)」を参照してください。
次の種類のメソッドに ref と out のキーワードを使用できません:
async、修飾子を使用して定義する単一のメソッド。
yield を返します。 または yield break のステートメントを含む反復子のメソッド。
使用例
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# 言語仕様」を参照してください。言語仕様は、C# の構文と使用法に関する信頼性のある情報源です。