Передача параметров по значению и по ссылке
Когда параметры передаются в метод обычным образом (без до- полнительных ключевых слов ref и out), любые изменения параметров внутри метода не влияют на его значение в основной программе. Пред- положим, у нас есть следующий метод:
private void Calc(int Number)
{
Number = 10;
}
Видно, что внутри метода происходит изменение переменной
Number, которая была передана как параметр. Попробуем вызвать метод:
int n = 1; Calc(n);
MessageBox.Show(n.ToString());
На экране появится число 1, то есть, несмотря на изменение пере- менной в методе Calc, значение переменной в главной программе не изменилось. Это связано с тем, что при вызове метода создается копия переданной переменной, именно ее изменяет метод. При завершении метода значение копий теряется. Такой способ передачи параметра на- зывается передачей по значению.
Чтобы метод мог изменять переданную ему переменную, ее следу- ет передавать с ключевым словом ref – оно должно быть как в сигнату- ре метода, так и при вызове:
private void Calc(ref int Number)
{
Number = 10;
}
int n = 1; Calc(ref n);
MessageBox.Show(n.ToString());
В этом случае на экране появится число 10: изменение значения в методе сказалось и на главной программе. Такая передача метода на- зывается передачей по ссылке, т. е. передается уже не копия, а ссылка на реальную переменную в памяти.
Если метод использует переменные по ссылке только для возврата значений и не имеет значения, что в них было изначально, то можно не
инициализировать такие переменные, а передавать их с ключевым сло- вом out. Компилятор понимает, что начальное значение переменной не важно, и не ругается на отсутствие инициализации:
private void Calc(out int Number)
{
Number = 10;
}
int n; // Ничего не присваиваем! Calc(out n);
Достарыңызбен бөлісу: |