• Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;


Иллюстрированный самоучитель по Architecture .NET

Заместители и заглушки

Как же во время выполнения удается удовлетворить различные требования различных контекстов? Когда какой-нибудь объект располагается в другом контексте (например, объект HotelBroker в экземпляре NewResevation), взамен указателя непосредственно на сам объект, возвращается указатель на некоторый заместитель. Реальный объект постоянно находится в своем первоначальном контексте. Заместитель – объект, который представляет первоначальный объект в другом контексте. Статический метод Remoting-Services::IsTransparentProxy определяет, на что ссылается указатель: на реальный объект или на заместитель. Рассмотрим код в Threading.h на шаге 4 проекта TestThreading:

bool bTrans; // логическая булева переменная
bTrans bTrans = RemotingServices::IsTransparentProxy(
customers); // клиенты
Console::WriteLine (
"Is the customer object a proxy? {0}",
// "Объект Клиент представляет заместитель? {0}",
bTrans.ToString());
bTrans = RemotingServices::IsTransparentProxy(
hotelBroker); Console::WriteLine(
"Is the bookings object a proxy? {0}",
// "Заказывает заместитель? {0}",
bTrans.ToString());

Этот код генерирует следующую выдачу:

Is the customer object a proxy? False
Is the bookings object a proxy? True

Перевод такой:

Объект Клиент представляет заместитель? Ложь
Заказывает заместитель? Истина

При запуске программа выполняется в определенном по умолчанию контексте. Все объекты, такие как Customers (Клиенты), не предъявляющие специальных требований, создаются внутри этого контекста (контекст 0). Какой-нибудь объект, такой как HotelBroker с другими требованиями к синхронизации, создается в другом контексте (контекст 1), а заместитель возвращается в контекст 0.

Теперь, запрашивая метод MakeReservation объекта HotelBroker, мы реально получаем доступ к методу заместителя. Метод заместителя может потом применить замок синхронизации и затем делегировать функции методу реального объекта HotelBroker. Метод настоящего объекта возвращает управление заместителю. А заместитель может тогда удалить замок синхронизации и возвратить управление вызвавшей его программе. Такая технология, когда во время выполнения используются заместители для перехвата вызовов методов реальных объектов, называется перехватыванием.

Можно также просмотреть подобный пример под названием MarshalByReference в папке с примерами. Он показывает различные способы создания объекта и эффект от создания заместителя.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.