logo search
CSharp_Prog_Guide

Передача параметров

В C# параметры могут быть переданы либо по значению, либо по ссылке. Передача параметров по ссылке позволяет изменять и сохранять измененные значения параметров членов функций, методов, свойств, индексаторов, операторов и конструкторов. Для передачи параметра по ссылке используйте ключевое слово ref или out. Для простоты в этом примере используется только ключевое слово ref. Дополнительные сведения об отличиях ключевых слов ref и out см. в разделе Передача массивов при помощи параметров ref и out. Пример.

// Passing by value

static void Square(int x)

{

// code...

}

// Passing by reference

static void Square(ref int x)

{

// code...

}

Passing Value-Type Parameters

A value-type variable contains its data directly as opposed to a reference-type variable, which contains a reference to its data. Therefore, passing a value-type variable to a method means passing a copy of the variable to the method. Any changes to the parameter that take place inside the method have no affect on the original data stored in the variable. If you want the called method to change the value of the parameter, you have to pass it by reference, using the ref or out keyword. For simplicity, the following examples use ref.

Example: Passing Value Types by Value

The following example demonstrates passing value-type parameters by value. The variable n is passed by value to the method SquareIt. Any changes that take place inside the method have no affect on the original value of the variable.

class PassingValByVal

{

static void SquareIt(int x)

// The parameter x is passed by value.

// Changes to x will not affect the original value of x.

{

x *= x;

System.Console.WriteLine("The value inside the method: {0}", x);

}

static void Main()

{

int n = 5;

System.Console.WriteLine("The value before calling the method: {0}", n);

SquareIt(n); // Passing the variable by value.

System.Console.WriteLine("The value after calling the method: {0}", n);

}

}

Output

The value before calling the method: 5

The value inside the method: 25

The value after calling the method: 5

Code Discussion

The variable n, being a value type, contains its data, the value 5. When SquareIt is invoked, the contents of n are copied into the parameter x, which is squared inside the method. In Main, however, the value of n is the same, before and after calling the SquareIt method. In fact, the change that takes place inside the method only affects the local variable x.