Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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.

Оглавление книги


Генерация: 3.610. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз