c# - 从另一个方法调用参数
问题描述
我需要callback
从ResponseReceived
处理程序中调用该操作。
如果有更好的方法,我很开放。
Connection
并且IDriver
来自不同的程序集。试图让他们一起工作。
class Test : IDriver
{
private Connection _connection;
public void Initialize()
{
_connection = new Connection(new ResponseCallback(ResponseReceived));
}
public void Begin(Action<OperationResponse> callback)
{
_connection.SendRequest();
}
private static void ResponseReceived(object source, MessageReceivedArgs e)
{
// Need to invoke `callback` parameter of Begin from here.
}
解决方案
将传入的Action<OperationResponse>
实例分配给私有字段以供以后使用。
我也删除了static
关键字 on ResponseReceived
。您不能从静态方法访问实例变量。如果您确实希望它是静态的,那么您也必须传入一个实例Test
(也许source
在这种情况下,您可以将其转换回Test
以获取_callback
实例)?
class Test : IDriver
{
private Connection _connection;
private Action<OperationResponse> _callback;
public void Initialize()
{
_connection = new Connection(new ResponseCallback(ResponseReceived));
}
public void Begin(Action<OperationResponse> callback)
{
_connection.SendRequest();
_callback = callback;
}
private void ResponseReceived(object source, MessageReceivedArgs e)
{
_callback(responseInstanceHere);
}
争论点
- 如果在回调发生之前使用不同的回调多次调用 Begin,您希望发生什么?选项包括:
- 使用传入的最新或第一个回调
- 抛出异常
ResponseReceived
如果在 Begin 之前被调用,你想发生什么?这甚至可能吗?null 回调应该抛出 NRE 还是应该被忽略?- 实例可以重复使用吗?您是否应该在至少有一个呼叫后清除回调?
简而言之,您的代码可以在适用的情况下使用一些错误检查和有用的异常。我不打算添加它们,因为我不知道这种类型的使用上下文。
推荐阅读
- c# - 测试流的 FTP 输出
- python - Pytorch ImageNet 数据集
- python - 从无头 Pygame 实例获取图像
- r - 允许集成模型获得多类结果的 R 包?
- zeromq - ZeroMQ - 我们可以在发送消息之前检查订阅者吗?
- assembly - 调用例程后访问推送的参数
- elasticsearch - 启动 Elastic Kibana - 内部服务器 500 错误 - [illegal_argument_exception] 应用程序权限必须引用至少一个资源”}
- python - 如何显示在列视图中选择的项目的描述?
- c++ - Boost 是否为 C++14 提供 span 的实现?
- python - Python电报机器人问题