program study story

プログラムの勉強 アウトプット

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引数を含むメソッドの呼び出し

別の変数宣言内でなく、メソッド呼び出しの引数リスト内で宣言できます。これにより、コンパクトで読みやすいコードが生成される。