Передача параметров (Руководство по программированию в C#)Passing Parameters (C# Programming Guide)

В C# аргументы могут передаваться параметрам либо по значению, либо по ссылке.In C#, arguments can be passed to parameters either by value or by reference. Передача по ссылке позволяет изменять и сохранять измененные значения параметров членов функций, методов, свойств, индексаторов, операторов и конструкторов в вызывающей среде.Passing by reference enables function members, methods, properties, indexers, operators, and constructors to change the value of the parameters and have that change persist in the calling environment. Чтобы передать параметр по ссылке, намереваясь изменить значение, используйте ключевое слово ref или out.To pass a parameter by reference with the intent of changing the value, use the ref, or out keyword. Чтобы передать по ссылке, намереваясь предотвратить копирование, но не изменение значения, используйте модификатор in.To pass by reference with the intent of avoiding copying but not changing the value, use the in modifier. Для простоты в этих примерах используется только ключевое слово ref.For simplicity, only the ref keyword is used in the examples in this topic. Дополнительные сведения о различиях между ключевыми словами in, ref и out см. в разделах in, ref, out.For more information about the difference between in, ref, and out, see in, ref, and out.

В приведенном ниже примере показано различие между параметрами-значениями и ссылочными параметрами.The following example illustrates the difference between value and reference parameters.

class Program
{
    static void Main(string[] args)
    {
        int arg;

        // Passing by value.
        // The value of arg in Main is not changed.
        arg = 4;
        squareVal(arg);
        Console.WriteLine(arg);
        // Output: 4

        // Passing by reference.
        // The value of arg in Main is changed.
        arg = 4;
        squareRef(ref arg);
        Console.WriteLine(arg);
        // Output: 16 
    }

    static void squareVal(int valParameter)
    {
        valParameter *= valParameter;
    }

    // Passing by reference
    static void squareRef(ref int refParameter)
    {
        refParameter *= refParameter;
    }
}

Дополнительные сведения см. в следующих разделах:For more information, see the following topics:

Спецификация языка C#C# Language Specification

Дополнительные сведения см. в разделе Список аргументов в Спецификации языка C#.For more information, see Argument lists in the C# Language Specification. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.The language specification is the definitive source for C# syntax and usage.

См. такжеSee also