为什么这个方法不需要参数?

Why doesn't this method need a parameter?

我正在为一家公司做论文项目,但我在理解某些代码时遇到了一些困难。

在他们的代码中有这样一行

_subscriber.StartSubscribing(_messageHandler.HandleMessage);

其中 _subscriber 是定义的函数

public override void StartSubscribing(Action<QueueItem> messageHandlerMethod);

并且_messageHandler定义

public void HandleMessage(QueueItem message)
{
  //Do code here
}

为什么顶部的 messageHandler 不需要 HandleMessage 的参数?

E.I

_subscriber.StartSubscribing(_messageHandler.HandleMessage(QueueItem));

对于 _subscriber.StartSubscribing(_messageHandler.HandleMessage),您使用的是更直接的方式 _subscriber.StartSubscribing(msg => _messageHandler.HandleMessage(msg))

所以它确实需要一个参数。

因为您实际上并没有执行方法 HandleMessage(如果您有括号和参数,就会发生这种情况)。您将它作为对 StartSubscribing 的引用传递,它需要一个具有指定签名的方法(void return,一个 QueueItem 类型的参数)

Action<T> 是一个通用委托,此特定版本是一个委托,它指定没有 return(无效)和类型为 T(或 QueueItem 的单个参数在你的例子中)

事实上,它是方法 StartSubscribing(或者它所属的 class)可能提供 QueueItem 的实例 - 可能是这样的:

public override void StartSubscribing(Action<QueueItem> messageHandlerMethod)
{
    // do something to get/create a QueueItem
    QueueItem item = SomeMagic();

   // pass it back to the passed in delegate
   messageHandlerMethod(item);   
}