C# 3.0 C#MRDS:为什么处理程序是虚拟的?

C# 3.0 C#MRDS:为什么处理程序是虚拟的?,c#-3.0,virtual-functions,robotics-studio,C# 3.0,Virtual Functions,Robotics Studio,请熟悉microsoft robotics studio的人解释一下为什么处理程序操作是虚拟的,而有些操作设置为非虚拟的 [ServiceHandler(ServiceHandlerBehavior.Concurrent)] public virtual IEnumerator<ITask> GetHandler(Get get) { get.ResponsePort.Post(_state); yield break; } [ServiceHandler(Serv

请熟悉microsoft robotics studio的人解释一下为什么处理程序操作是虚拟的,而有些操作设置为非虚拟的

[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
public virtual IEnumerator<ITask> GetHandler(Get get)
{
    get.ResponsePort.Post(_state);
    yield break;
}
[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
公共虚拟IEnumerator GetHandler(Get-Get)
{
get.ResponsePort.Post(_state);
屈服断裂;
}
vs

[ServiceHandler(ServiceHandlerBehavior.Concurrent)]
公共IEnumerator SubscribeHandler(订阅)
{
SubscribeRequestType请求=subscribe.Body;
LogInfo(“订阅请求来源:“+请求.订阅者”);
//使用订阅管理器处理订阅服务器
收益率仲裁者。选择(
SubscribeHelper(_submgrPort,request,subscribe.ResponsePort),
代表(成功结果成功)
{
//成功订阅时发送通知,以便
//订阅者可以初始化自己的状态
base.SendNotificationToTarget(request.Subscriber、\u submgrPort、\u state);
},
代表(例外情况e)
{
日志错误(null,“订阅失败”,e);
}
);
屈服断裂;
}

提前感谢。

虚拟处理程序用于您希望用作其他类基础的类中。非虚拟的处理程序要么在派生类中声明为重写,要么在将不派生的类中声明为重写(在示例代码中经常如此)

参考以下条款:

[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;
}