C#のパラメーター通過メカニズムの方法
4つのカテゴリにパラメータC#メソッドの形で、機構を渡すパラメータに応じ。値パラメータ、参照パラメータ、出力パラメータ、およびパラメータの配列パラメータが記述子を表すように定義されたときに異なるパラメータを追加することにより。
A、valueパラメータ:(パラメータタイプ値形式)
修飾子パラメータなしの値のパラメータ宣言です。
パラメータ・プロセス内のローカル変数に対応する値が、メソッド呼び出しの対応する引数からその初期値が提供されます。
パラメータは、パラメータ値である場合には、引数が対応する要件のメソッド呼び出しのパラメータに暗黙的に変換する必要があります。
例の数、メインと影響を受けていないことにより、内のExchange方法、およびBを交換参照してください。
class Program
{
static void Main(string[] args)
{
int a = 3, b = 5;
Console.WriteLine("Main.. a:" + a + "...b:" + b);
Exchange(a, b);
Console.WriteLine("Main.. a:" + a + "...b:" + b);
}
static void Exchange(int a, int b)
{
Console.WriteLine("Exchange.. a:" + a + "...b:" + b);
int temp = a;
a = b;
b = temp;
Console.WriteLine("Exchange.. a:" + a + "...b:" + b);
}
}
第二に、参照パラメータ(REFキーワード)
REF修飾子パラメータで宣言された参照パラメータです。
位置参照パラメータで表される引数の格納位置は、メソッド呼び出しを与えています。
参照パラメータのパラメータは、この方法は、対応する引数が同一のパラメータタイプおよびREF後キーワード可変組成物に接続する必要が呼び出したとき。それは、参照パラメータ転送として使用することができます前に、変数を明確に割り当てる必要があります。
この場合、bの値は、変換の主な方法で発生する。また、上記のコードでは、私は修飾ルック結果refのメソッドパラメータの例です。
class Program
{
static void Main(string[] args)
{
int a = 3, b = 5;
Console.WriteLine("Main.. a:" + a + "...b:" + b);
Exchange(ref a,ref b);
Console.WriteLine("Main.. a:" + a + "...b:" + b);
Console.ReadKey();
}
static void Exchange(ref int a,ref int b)
{
Console.WriteLine("Exchange.. a:" + a + "...b:" + b);
int temp = a;
a = b;
b = temp;
Console.WriteLine("Exchange.. a:" + a + "...b:" + b);
}
}
それは我々が参照パラメータを使用する場合、複数の名前が同じストレージの場所を示すことになる、です。
第三に、出力パラメータ(outキーワード)
修飾子は、出力パラメータでoutパラメータで宣言されました。
出力パラメータの格納場所は、格納場所は、メソッド呼び出しの引数として与えられた変数として表されます。
およびREFキーワードに類似の参照パラメータは、メソッド呼び出しの前に割り当てられ、メソッド呼び出しが戻った後、出力パラメータの前に割り当て必要があることを除いて、outキーワード変更、使用を使用するように変更されたパラメータの参照を使用
栗の場合:
class Program
{
static void Main(string[] args)
{
int[] arr = new int[5] { 1, 2, 3, 4, 5 };
float average;
int sum = Calculation(arr, out average);
Console.WriteLine("这组数的和是:" + sum + "..平均数是:" + average);
Console.ReadKey();
}
static int Calculation(int[] arr,out float average)
{
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
sum += arr[i];
}
average = sum / arr.Length;
return sum;
}
}
出力パラメータは、呼び出し元のメソッドからデータを転送するために使用することができます。
第四に、形状パラメータ(参照型パラメータフォーム)
メソッドのパラメータの型が参照型である場合、パラメータの値は、変更される元の変数が変更され、通過するパラメータで参照されているタイプは、アドレスに渡されます。
栗の場合:配列内のパラメータ値を変更する、元の配列は、コードを見て、変更されます。
class Program
{
static void Main(string[] args)
{
int[] arr = new int[5] { 1, 2, 3, 4, 5 };
Console.WriteLine("Main 调用方法前:");
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
Console.WriteLine();
Reference(arr);
Console.WriteLine();
Console.WriteLine("Main 调用方法后:");
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
Console.ReadKey();
}
static void Reference(int[] arr)
{
Console.WriteLine("Reference 传进来:");
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
for (int i = 0; i < arr.Length; i++)
{
arr[i] = 0;
}
Console.WriteLine();
Console.WriteLine("Reference 修改后:");
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
}
}
C#で位置パラメータと名前付きパラメータ
位置パラメータは:メソッドの呼び出しは、各引数は位置パラメータに相当する位置に対応しなければならない場合、このパラメータは、上記の実施例で使用される位置パラメータと呼ばれ、我々は、位置パラメータです。
長い明示的に指定されたパラメータ名として、それはメソッド呼び出しの任意の順序の引数にリストされ得るようなC#から4.0開始し、パラメータという名前のメソッドの呼び出しメカニズムをサポートしています。
私は、このような何かをコールを形成するもののコード例を変更します:
class Program
{
static void Main(string[] args)
{
int a = 3, b = 5;
Console.WriteLine("Main.. a:" + a + "...b:" + b);
//Exchange(a, b);
Exchange(b: b, a: a);
Console.WriteLine("Main.. a:" + a + "...b:" + b);
Console.ReadKey();
}
static void Exchange(int a,int b)
{
Console.WriteLine("Exchange.. a:" + a + "...b:" + b);
int temp = a;
a = b;
b = temp;
Console.WriteLine("Exchange.. a:" + a + "...b:" + b);
}
}