从其他方法调用参数

时间:2018-08-13 13:32:29

标签: c#

我需要从callback处理程序中调用ResponseReceived动作。
如果有更好的方法,我会很开放。

ConnectionIDriver来自不同的程序集。试图使它们一起工作。

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.
    }

1 个答案:

答案 0 :(得分:3)

将传入的Action<OperationResponse>实例分配给私有字段以供以后使用。

我还删除了static上的ResponseReceived关键字。您不能从静态方法访问实例变量。如果您确实希望它是静态的,则还必须传入一个Test的实例(也许就是source,在这种情况下,您可以将其转换回Test以获得{{ 1}}实例)?

_callback

竞争点

  • 如果在发生回调之前用不同的回调多次调用Begin会发生什么?选项包括:
    • 使用传入的最新或第一个回调
    • 引发异常
  • 如果在开始之前调用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); } 会发生什么?这有可能吗?空回调应该引发NRE还是应将其忽略?
  • 实例可以重用吗?至少有一个通话后,您是否应该清除回调?

简而言之,您的代码可以在适用的地方使用一些错误检查和有用的异常。我不打算添加它们,因为我不知道这种类型的使用上下文。