C# MRDS: почему обработчики виртуальные?
Может кто-нибудь, знакомый с робототехнической студией Microsoft, пожалуйста, объясните, почему операции с обработчиками являются виртуальными, а некоторые - не виртуальными?
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public virtual IEnumerator<ITask> GetHandler(Get get)
{
get.ResponsePort.Post(_state);
yield break;
}
против
[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;
}
Заранее спасибо.
1 ответ
Решение
Виртуальные обработчики используются в классах, которые вы планируете использовать в качестве базы для других классов. Не виртуальные обработчики объявляются как переопределения в производных классах или в классах, которые не будут производными (как это часто бывает в примере кода).
Обратитесь к следующим статьям:
http://msdn.microsoft.com/en-us/library/9fkccyh4(v=VS.100).aspx
Почему виртуальные методы должны быть явно переопределены в C#?