首页 > 解决方案 > 从另一个方法调用参数

问题描述

我需要callbackResponseReceived处理程序中调用该操作。
如果有更好的方法,我很开放。

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

标签: c#

解决方案


将传入的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 还是应该被忽略?
  • 实例可以重复使用吗?您是否应该在至少有一个呼叫后清除回调?

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


推荐阅读