Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Анализ программного кода делегирования

Анализ программного кода делегирования

Предложенный выше метод Main() начинается с создания экземпляров типов Garage и ServiceDepartment. Когда вы пишете

// Помыть все грязные машины.

g.ProcessCars(new Car.CarDelegate(sd.WashCar));

это на самом деле означает: "Добавить указатель на метод ServiceDepartment.WashCar() к объекту Car.CarDelegate и передать этот объект в Garage.ProcessCars()". Подобно любому автомобильному предприятию в реальном мире, все заказы передаются в отдел технического обслуживания (что и объясняет, почему замена масла, обычно требующая 30 минут, занимает целых 2 часа). С учетом этого ProcessCars() можно интерпретировать так.

// CarDelegate указывает на функцию ServiceDepartment.WashCar.
public void ProсessCars(Car.CarDelegate proc) {
 foreach (Car с in theCars)
 proc(c); // proc(c) =› ServiceDepartment.WashCar(c)
 …
}

Точно так же, если вы говорите

// Поменять шины.
g.ProcessCars(new Car.CarDelegate(sd.RotateTires));

то ProcessCars() можно интерпретировать, как

// CarDelegate указывает на функцию ServiceDepartment.RotateTires.
public void ProcessCars(Car.CarDelegate proc) {
 …
 foreach(Car с in the Cars)
 proc(c); //proc(c) =› ServiceDepartment.RotateTires(e)
 …
}

Исходный код. Проект CarGarage размещен в подкаталоге, соответствующем главе 8.

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


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