熟悉microsoft robotics studio的人能否解释一下为什么处理程序操作是虚拟的,而有些设置为非虚拟的?
[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;
}
虚拟处理程序用于您希望用作其他类基的类。非虚的处理程序要么在派生类中声明为覆盖,要么在不会派生的类中声明为覆盖(在示例代码中经常出现这种情况)。
参考以下文章:
http://msdn.microsoft.com/en-us/library/9fkccyh4 (v = VS.100) . aspx
什么是虚方法?
c#虚方法问题
为什么要在c#中显式地覆盖虚方法?