C#の方法
一つの方法は、タスクを実行するステートメントのブロックのためにグループ化関連するいくつかのステートメントを置くことです。 すべてのプログラムは、メインメソッドで少なくともC#クラスを持っています。
メソッドを使用するには、次のものが必要です。
- 定義法
- メソッドを呼び出します
で定義されているC#メソッド
メソッドを定義するときは、基本的に言えば、それは構造の要素の文です。 次のようにC#では、構文定義の方法は次のとおりです。
<アクセス指定子> <戻り値の型> <メソッド名>(パラメータリスト) { メソッド本体 }
以下は、個々の要素であります:
- アクセス指定子:アクセス修飾子、または別のクラスの可視性のための方法を決定する変数。
- 戻り値の型:戻り値の型は、メソッドは値を返すことができます。戻り値の型は、メソッドの戻り値のデータ型です。 この方法は、任意の値を返さない場合、戻り値の型はvoidです。
- メソッド名:メソッド名は、一意の識別子であり、大文字と小文字が区別されます。これは、他の識別子クラスの宣言と同じにすることはできません。
- パラメータリスト:括弧で囲まれたパラメータのリストは、パラメータは、データ伝送及び受信方法に使用されます。パラメータタイプパラメータリストは、メソッド、順序および量を指します。 パラメータは、メソッドにパラメータが含まれないことがあり、すなわち、任意です。
- メソッド本体:メソッド本体、タスクの命令セットを完了する必要性を含みます。
例
次のコードは、2つの整数値を受け付ける機能FindMaxを示しており、2つの値の大きい方を返します。 これは、公共のアクセス修飾子を持っているので、クラスの外からクラスのインスタンスを使用してアクセスすることができます。
class NumberManipulator { public int FindMax(int num1, int num2) { /* 局部变量声明 */ int result; if (num1 > num2) result = num1; else result = num2; return result; } ... }
C#のメソッドを呼び出します
あなたは、呼び出し元のメソッドの名前を使用することができます。 次の例では、この点を示しています。
システムを用いました。 名前空間のCalculatorApplication { クラスNumberManipulator { 公共int型FindMax(int型NUM1、int型からnum2) { / *ローカル変数宣言* / int型の結果。 (NUM1>からnum2)の場合 結果= num1を。 ほかに 結果= NUM2。 結果を返します。 } 静的な無効メイン(文字列[] args) { / *ローカル変数の定義* / int型のA = 100; int型B = 200; int型のRET; NumberManipulatorのn =新しいNumberManipulator(); //コールFindMax方法RET = n.FindMax(a、b)は、 Console.WriteLineを( "Maxは次のとおりです。{0}"、RET)。 Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
最大値は次のとおりです。200
また、別のクラスから呼び出されるパブリックメソッドクラスのインスタンスの他の種類をすることができます。 例えば、NumberManipulatorクラスに属しFindMax方法は、あなたは内の別のクラスTestからそれを呼び出すことができます。
システムを用いました。 名前空間のCalculatorApplication { クラスNumberManipulator { 公共int型FindMax(int型NUM1、int型からnum2) { / *ローカル変数宣言* / int型の結果。 (NUM1>からnum2)の場合 結果= num1を。 ほかに 結果= NUM2。 結果を返します。 } } クラスTest { 静的な無効メイン(文字列[] args) { / *ローカル変数の定義* / int型のA = 100; int型B = 200; int型のRET; NumberManipulatorのn =新しいNumberManipulator(); //コールFindMax方法RET = n.FindMax(a、b)は、 Console.WriteLineを( "Maxは次のとおりです。{0}"、RET)。 Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
最大值是: 200
再帰メソッド呼び出し
この方法は、自己を呼び出すことができます。 これは、再帰と呼ばれています。次の例では、数値の階乗を計算する再帰関数を使用しています。
システムを用いました。 名前空間のCalculatorApplication { クラスNumberManipulator { 公共int型の階乗(int型数値) { / *ローカル変数の定義* / int型の結果。 (NUM == 1)であれば { 1を返します。 } ほかに { 結果=階乗(NUM - 1)* NUM。 結果を返します。 } } 静的な無効メイン(文字列[] args) { NumberManipulatorのn =新しいNumberManipulator(); //階乗メソッドConsole.WriteLineをを呼び出します(「6階乗は次のとおりです。{0} "、n.factorial(6))。 Console.WriteLineを( "7階乗は次のとおりです。{0}"、n.factorial(7)); Console.WriteLineを( "8階乗は次のとおりです。{0}"、n.factorial(8)); Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
6階乗は次のとおりです。720 7階乗は次のとおりです。5040 8階乗は次のとおりです。40320
パラメーターの受け渡し
あなたはパラメータを持つメソッドを呼び出すときは、メソッドにパラメータを渡す必要があります。 C#では、メソッドにパラメータを渡すには、3つの方法があります。
方式 | 描述 |
---|---|
值参数 | 这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值。在这种情况下,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。 |
引用参数 | 这种方式复制参数的内存位置的引用给形式参数。这意味着,当形参的值发生改变时,同时也改变实参的值。 |
输出参数 | 这种方式可以返回多个值。 |
値でパラメータを渡します
これはデフォルトのパラメータの受け渡しです。 このように、ときに各パラメータの新しい格納場所を作成するメソッドを呼び出します。
実際のパラメータ値は、パラメータ、引数2つの異なるメモリ値で使用されるパラメータにコピーされます。 だから、ときに、パラメータ値の変更は、このように実際のパラメータデータのセキュリティを確保し、引数の値には影響しません。 次の例は、この概念を示しています。
using System; namespace CalculatorApplication { class NumberManipulator { public void swap(int x, int y) { int temp; temp = x; /* 保存 x 的值 */ x = y; /* 把 y 赋值给 x */ y = temp; /* 把 temp 赋值给 y */ } static void Main(string[] args) { NumberManipulator n = new NumberManipulator(); /* 局部变量定义 */ int a = 100; int b = 200; Console.WriteLine("在交换之前,a 的值: {0}", a); Console.WriteLine("在交换之前,b 的值: {0}", b); /* 调用函数来交换值 */ n.swap(a, b); Console.WriteLine("在交换之后,a 的值: {0}", a); Console.WriteLine("在交换之后,b 的值: {0}", b); Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
在交换之前,a 的值:100 在交换之前,b 的值:200 在交换之后,a 的值:100 在交换之后,b 的值:200
結果はあっても、関数内の任意の変化の値が起こった、値を変更することを示しました。
参照によってパラメータを渡します
基準パラメータは、可変メモリ位置への参照です。 パラメータは参照によって渡されたときにパラメータの値が異なっていると、それは、これらのパラメータのための新しい保管場所を作成していないことです。 参照パラメータは、メソッドの実際のパラメータが同じメモリ位置を持って表しています。
C#で、参照パラメータを宣言するのrefキーワードを使用して。 次の例では、この点を示しています。
システムを用いました。 名前空間のCalculatorApplication { クラスNumberManipulator { 公共ボイドスワップ(refのint型のx、のref int型のy) { int型の温度; 温度= X; / * X *の値を保存/ X = Y; / * Yをx *に割り当てられています/ Y =温度; / *のy *に一時割り当て/ } 静的な無効メイン(文字列[] args) { NumberManipulatorのn =新しいNumberManipulator(); / *ローカル変数の定義* / int型のA = 100; int型B = 200; Console.WriteLineを( "交換する前に、の値:{0}"、a)は、 Console.WriteLineを( "交換する前に、a、b値:{0}"、b)は、 / *交換価値に関数を呼び出します* / n.swap(、REF bをREF)。 Console.WriteLineを( "交換した後、の値:{0}"、a)は、 Console.WriteLineを( "交換した後、a、b値:{0}"、b)は、 Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
在交换之前,a 的值:100 在交换之前,b 的值:200 在交换之后,a 的值:200 在交换之后,b 的值:100
結果は、変更内スワップ関数の値が、この変化は、 主な機能に反映させることができることを示しました。
出力によってパラメータを渡します
return文は関数から値を返すためにのみ使用することができます。 ただし、関数から2つの値を返すために、出力パラメータを使用することができます 。 データ出力パラメータ出力方法は、自分の割り当て、および他の類似の参照パラメータになります。
次の例では、この点を示しています。
using System; namespace CalculatorApplication { class NumberManipulator { public void getValue(out int x ) { int temp = 5; x = temp; } static void Main(string[] args) { NumberManipulator n = new NumberManipulator(); /* 局部变量定义 */ int a = 100; Console.WriteLine("在方法调用之前,a 的值: {0}", a); /* 调用函数来获取值 */ n.getValue(out a); Console.WriteLine("在方法调用之后,a 的值: {0}", a); Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
在方法调用之前,a 的值: 100 在方法调用之后,a 的值: 5
出力パラメータ変数に供給すると、割り当てを必要としません。 あなたがこの方法で指定されていないパラメータの初期値から値を返すために必要がある場合、出力パラメータは、特に有用です。 これを理解するには、次の例を考えてみましょう。
using System; namespace CalculatorApplication { class NumberManipulator { public void getValues(out int x, out int y ) { Console.WriteLine("请输入第一个值: "); x = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入第二个值: "); y = Convert.ToInt32(Console.ReadLine()); } static void Main(string[] args) { NumberManipulator n = new NumberManipulator(); /* 局部变量定义 */ int a , b; /* 调用函数来获取值 */ n.getValues(out a, out b); Console.WriteLine("在方法调用之后,a 的值: {0}", a); Console.WriteLine("在方法调用之后,b 的值: {0}", b); Console.ReadLine(); } } }
上記のコードはコンパイルされ、実行されると、次の結果を(ユーザ入力に応じて)生成します。
値を入力してください: 7 第二の値を入力してください: 8 メソッドの呼び出し後、値:7 メソッド呼び出しの後に、a、b値:8