Boj*_*jje 0 c# delegates action
我正在为一家公司的论文工作项目工作,我在理解一些代码方面遇到了一些困难.
在他们的代码中,他们有这样的一行
_subscriber.StartSubscribing(_messageHandler.HandleMessage);
Run Code Online (Sandbox Code Playgroud)
_subscriber函数在哪里定义
public override void StartSubscribing(Action<QueueItem> messageHandlerMethod);
Run Code Online (Sandbox Code Playgroud)
并_messageHandler定义
public void HandleMessage(QueueItem message)
{
//Do code here
}
Run Code Online (Sandbox Code Playgroud)
为什么在messageHandler顶部不需要HandleMessage的参数?
EI
_subscriber.StartSubscribing(_messageHandler.HandleMessage(QueueItem));
Run Code Online (Sandbox Code Playgroud)
因为您实际上并没有执行该方法HandleMessage(如果您有括号和参数,则会发生这种情况).您将它作为引用传递给StartSubscribing它需要具有指定签名的方法(void返回,类型的一个参数QueueItem)
Action<T>是一个泛型委托,这个特定的版本是一个委托,它指定没有返回(void)和一个类型的单个参数T(或QueueItem在你的例子中)
事实上,它是StartSubscribing可能提供实例的方法(或者它所属的类)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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |