25

私が理解しているように、C# はパラメーターを参照によってメソッドに渡します。VB.NET では、これを ByVal と ByRef で指定できます。デフォルトは ByVal です。

これは Visual Basic 6.0 との互換性のためですか、それともランダムですか? また、C# で何を使用するかを指定するにはどうすればよいですか? パラメータを値で渡すというアイデアが好きです。

4

3 に答える 3

59

C# のパラメーターは、デフォルトで値渡しされます。これを明示するための修飾子はありませんが、ref/を追加するoutと、パラメーターは参照渡しになります。

ここでの通常の混乱は、次の違いです。

  • 値による値型の受け渡し (値型への変更は呼び出し元には表示されませんが、値型は理想的には不変であるべきです)
  • 参照によって値の型を渡す (値の型への変更は呼び出し元に表示されますが、値の型は理想的には不変である必要があります。重要なので 2 回言います ;p)
  • 参照を値で渡す ( ref-type のフィールド/プロパティへの変更は呼び出し元に表示されますが、ref-type を新しい/別のオブジェクトに再割り当てすることは表示されません)
  • 参照による参照の受け渡し (フィールド/プロパティへの変更、および参照の再割り当ては呼び出し元に表示されます)
于 2010-06-14T20:08:08.943 に答える
13

値渡しは C# のデフォルトです。ただし、渡される変数が参照型の場合は、参照を値で渡します。これがおそらくあなたの混乱の原因です。

基本的に、参照を値で渡す場合、それが参照するオブジェクトを変更でき、これらの変更はメソッドの外部に保持されますが、変数に別のオブジェクトを参照させて、その変更をメソッドの外部に保持させることはできません。

于 2010-06-14T20:11:33.997 に答える
7

C# のパラメーターは、デフォルトで「ByVal」が渡されます。別の動作が必要な場合は、「ref」または「out」を指定する必要があります。

于 2010-06-14T20:07:57.057 に答える