あなたは使うことができます out
、パラメータ調整剤としてまたはインターフェイスおよび代表者でジェネリック型パラメータ宣言では、2つのコンテキスト(各詳細情報へのリンクです)でコンテキストキーワードを。このトピックでは、パラメーター修飾子について説明しますが、ジェネリック型パラメーター宣言については、この他のトピックを参照してください。
out
キーワードは、引数が参照渡しされます。これはref
キーワードに似ref
ていますが、渡される前に変数を初期化する必要がある点が異なります。out
パラメータを使用するには、メソッド定義と呼び出しメソッドの両方でout
キーワードを明示的に使用する必要があります。例:C#
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
キーワードは異なる実行時の動作を引き起こし、それらはコンパイル時にメソッドシグネチャの一部とはみなされません。したがって、一方のメソッドがref
引数を取り、もう一方のメソッドが引数を受け取るという唯一の違いがある場合、メソッドをオーバーロードすることはできませんout
。たとえば、次のコードはコンパイルされません:C#
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
引数を取り、もう一方がどちらも使用しない場合は、オーバーロードを実行できます。C#
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
プロパティは変数ではないため、out
パラメーターとして渡すことはできません。
配列の受け渡しについてはref
、およびを使用した配列の受け渡しを参照してください。out
(C#プログラミングガイド)。
ref
およびout
キーワードは、次の種類のメソッドには使用できません。
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
例
out
メソッドが複数の値を返すようにする場合は、メソッドの宣言が役立ちます。次の例ではout
、1つのメソッド呼び出しで3つの変数を返すために使用しています。3番目の引数はnullに割り当てられることに注意してください。これにより、メソッドはオプションで値を返すことができます。C#
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;
}
}
out
割り当てられる前から読み取ることはできません。ref
この制限はありません。だからそれがあります。