C # MRDS: почему обработчики виртуальные?

Может ли кто-нибудь, знакомый со студией робототехники Microsoft, объяснить, почему операции обработчика виртуальные, а некоторые не виртуальные?

[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public virtual IEnumerator<ITask> GetHandler(Get get)
{
    get.ResponsePort.Post(_state);
    yield break;
}

vs

[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public IEnumerator<ITask> SubscribeHandler(Subscribe subscribe)
{
    SubscribeRequestType request = subscribe.Body;
    LogInfo("Subscribe request from: " + request.Subscriber);

    // Use the Subscription Manager to handle the subscribers
    yield return Arbiter.Choice(
        SubscribeHelper(_submgrPort, request, subscribe.ResponsePort),
        delegate(SuccessResult success)
        {
            // Send a notification on successful subscription so that the
            // subscriber can initialize its own state
            base.SendNotificationToTarget<Replace>(request.Subscriber, _submgrPort, _state);
        },
        delegate(Exception e)
        {
            LogError(null, "Subscribe failed", e);
        }
    );

    yield break;
}

Заранее спасибо.


person nixgadget    schedule 01.09.2011    source источник


Ответы (1)


Виртуальные обработчики используются в классах, которые вы планируете использовать в качестве основы для других классов. Обработчики, которые не являются виртуальными, либо объявляются как переопределения в производных классах, либо в классах, которые не будут производными (как это часто бывает в примере кода).

См. Следующие статьи:

http://msdn.microsoft.com/en-us/library/9fkccyh4(v=VS.100).aspx

Что такое виртуальные методы?

Вопрос о виртуальных методах C #

Почему виртуальные методы следует явно переопределять в C #?

person nixgadget    schedule 11.10.2011