【问题标题】:C# MRDS: Why are the handlers virtual?C# MRDS:为什么处理程序是虚拟的?
【发布时间】:2011-11-08 01:30:01
【问题描述】:

能否请熟悉微软机器人工作室的人解释一下为什么处理程序操作是虚拟的,而有些被设置为非虚拟的?

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

提前致谢。

【问题讨论】:

    标签: c#-3.0 virtual-functions robotics-studio


    【解决方案1】:

    虚拟处理程序用于您希望用作其他类的基础的类中。非虚拟的处理程序要么在派生类中声明为覆盖,要么在不会派生的类中声明(在示例代码中经常出现这种情况)。

    参考以下文章:

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

    What are Virtual Methods?

    C# virtual methods question

    WHy should virtual methods be explicitly overridden in C#?

    【讨论】:

      猜你喜欢
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多