Книга: C# для профессионалов. Том II
Параметры методов
Параметры методов
Как и в C++, по умолчанию параметры передаются в методы по значению. Если требуется это изменить, можно использовать ключевое слово ref
, указывающее, что параметр передается по ссылке, и out
, чтобы указать, что это параметр вывода (всегда передается по ссылке). Если это сделано, то необходимо объявлять этот факт как в определении метода, так и при его вызове.
public void MultiplyByTwo(ref double d, out double square) {
d *= 2;
square = d*d;
}
// позже, при вызове метода
double Value, Square Value = 4.0;
MultiplyByTwo(ref Value, out Square);
Передача по ссылке означает, что метод может изменять значение параметра. Передача по ссылке также осуществляется, чтобы улучшить производительность при работе с большими структурами, также как и в C++, передача по ссылке означает, что копируется только адрес. Отметим, однако, что, если при передаче по ссылке из соображений производительности вызываемый метод по-прежнему не изменяет значения параметра, то C# не разрешает присоединять модификатор const
к параметрам, как это делает C++.
Параметры типа out
действуют по большей части так же, как ссылочные параметры. Но они предназначены для случаев, когда вызываемый метод задает значение для параметра, а не изменяет его. Следовательно, инициализации параметров будут отличаться. C# требует, чтобы параметр ref
инициализировался внутри вызываемого метода до своего использования.