C# out修飾子キーワード
out パラメーター修飾子
・outのキーワードによって、参照により引数が渡される。
・パラメーターに対するすべての操作は引数に対して行われる。
似たものとしては、refキーワードと似ているが、
refでは、変数を初期化してから渡す必要がある。
inキーワードとも似ているが、
inでは、呼び出されたメソッドで引数の値を変更することができません。
・outパラメーターを使用するには、メソッド定義と呼び出し元のメソッドの両方で、outキーワードを明示的に使用する必要があります。
例題
int initializeInMethod; OutArgExample(out initializeInMethod); Console.WriteLine(initializeInMethod); // value is now 44 void OutArgExample(out int number) { number = 44; }
注)
outキーワードは、ジェネリック型パラメーターと共に使用すると、型パラメーターが共変であることを指定することもできます。
共変とは
ある変換に対して変換の対象が示す性質のこと。
outの引数として渡される変数は、メソッド呼び出しで渡される前に初期化する必要はない。
だだし、呼び出されたメソッドでは、メソッドから制御が返される前に値を割り当てる必要がある。
in,ref,outキーワードはオーバーロード対策のためのメソッドシグネチャの一部とは見なされない。
シグネチャとは
メソッド名、パラメータ数と順序、パラメータの型、戻り値の型に含まれること。
ref,inとoutの違い
1つのメソッドはrefまたはin引数を受け取り、
もう一方のメソッドは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) { } }
・プロパティは変数でないため、outパラメーターとして渡すことができない。
・次の種類のメソッドには、in,ref,outキーワードを使用することはできない。
● async修飾子を利用して定義したAsynuメソッド
● yield returnまたはyield breakステートメントを含むメソッド
・outパラメーターの宣言
outo引数を含むメソッドの宣言は、複数の値を返すための従来の回避策。※同様のシナリオでタプルを検討できる。
outキーワードを使用して、1つのメソッド呼び出しで3つの変数を返します。3番目の引数がnullに割り与えられることに注意。これにより、必要に応じてメソッドが値を返すことができる。
・out引数を含むメソッドの呼び出し
別の変数宣言内でなく、メソッド呼び出しの引数リスト内で宣言できます。これにより、コンパクトで読みやすいコードが生成される。