Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Передача ссылочных типов по ссылке
Передача ссылочных типов по ссылке
Теперь предположим, что у нас есть метод SendAPersonByReference(), который передает ссылочный тип по ссылке (обратите внимание на то, что здесь присутствует модификатор параметра ref).
public static void SendAPersonByReference(ref Person p) {
// Изменение некоторых данных 'р'.
p.age = 122;
// Теперь 'р' указывает на новый объект в динамической памяти!
р = new Person("Никки", 222);
}
Как вы можете догадаться сами, это обеспечивает вызывающей стороне полную гибкость в управлении входными параметрами. Вызывающая сторона не только может изменить состояние объекта, но и переопределить ссылку так, чтобы она указывала на новый тип Person. Рассмотрите следующий вариант.
static void Main(string[] args) {
// Передача ссылочных типов по ссылке.
Console.WriteLine("n*** Передача объекта Person по ссылке ***");
Person mel = new Person("Мэл", 23);
Console.WriteLine("Person до вызова по ссылке:");
mel.PrintInfo();
SendAPersonByReference(ref mel);
Console.WriteLine("Person после вызова по ссылке:");
mel.PrintInfо();
}
Из рис. 3.16 видно, что тип с именем Мэл возвращается после вызова как тип с именем Никки.
Рис. 3.16. Передача ссылочных типов по ссылке позволяет перенаправить ссылку
Золотым правилом при передаче ссылочных типов по ссылке является следующее.
• Если ссылочный тип передается по ссылке, то вызывающая сторона может изменить не только состояние данных соответствующего объекта, но сам объект ссылки.
Исходный код. Проект RefTypeValTypeParams размещен в подкаталоге, соответствующем главе 3.
- Передача ссылочных типов по значению
- Передача прав
- Использование типов содержимого и столбцов
- 5.3 Классификация типов резервного копирования
- 2.7 Преобразования типов
- Описание типов модулей оперативной памяти
- 6.4.2. Передача номенклатурных позиций между ячейками склада
- Объекты без прототипов
- Глава 11 Передача во временное пользование и заказы
- Я получил странное письмо с приложенным к нему файлом attachment.zip и просьбой перейти по ссылке. Что мне делать?
- Глава 10 Передача файлов
- 5.3.8. Защищенная передача данных