.Net - 使用Action / Delegate将数据传回备份导航堆栈

时间:2014-02-15 15:48:50

标签: c# .net asynchronous

我有多个级别的嵌套类。我需要一种更好的方法来通过向嵌套堆栈发送值来通知我的父类。

为了扩展上述内容,在我的内部类中,我有一个异步方法调用。现在我需要在我的异步方法完成执行后通知我的父类。有没有办法可以使用Action获取值?

由于

1 个答案:

答案 0 :(得分:1)

我可能会建议您实现某种Observer或您选择的其他事件模式,而不是尝试将值“传递到堆栈”(将会非常混乱)自动神奇地通知并避免尝试将值返回到“向上堆栈”的父级?

作为一个简单的例子,我假设你目前的困境与此类似:

public void DoSomething(Action callback)
{
    DoSomethingElse(callback);
}

public void DoSomethingElse(Action callback)
{
    WeMustGoDeeper(callback);
}

public void WeMostGoDeeper(Action callback)
{
    // I have no idea who I am anymore.
}

即使是简单的观察者/事件系统,也要好得多。从本质上讲,你会有某种观察者提出一个事件(注意:这是非常简化的):

public class Observer
{
    public delegate void SomethingHappenedDelegate();

    public void NoReallySomethingHappened()
    {
        if(SomethingHappened != null)
            SomethingHappened();
    }

    public event SomethingHappenedDelegate SomethingHappened;
}

你在某个地方创建了这个类的实例,你的最后一个函数需要按照以下方式执行:

whateverTheObserver.NoReallySomethingHappened();

任何类都可以订阅此内容,并在发生事件时收到通知。你如何处理那个观察者完全取决于你。它可以通过调用堆栈传递,也可以从工厂或其他一些可访问的类中获得。