是否可以通过第三方库获取当前正在执行的代理(而不是MethodBase / MethodInfo)?

时间:2016-06-13 20:37:09

标签: c# .net delegates

我一直在嘲笑我,但我无法找到答案。

我知道MethodBase.GetCurrentMethod但是我很好奇是否有等价来获取当前正在执行的Delegate(如果有一个正在执行,那就是)。

这可能是偶然的吗? (编辑:这似乎无法通过核心.NET实现,所以我想知道是否有第三方库可能会这样做。)

供参考,我想做以下事项:

void Main()
{
    var target = new Inner();

    var reference = new Action( target.HelloWorld ); // Creates a System.Delegate reference.
    reference();
}

class Inner
{
    public void HelloWorld()
    {
        var method = MethodBase.GetCurrentMethod(); // Current method.
        var current = DelegateContext.GetCurrentDelegate(); // <==== Magic happens here. Gets "reference" from above.
    }
}

为什么?至于为什么我要这样做:对于每个引用,我想关联一些特定于该委托的数据(有点像环境数据,而不是显式的传入变量)。当委托执行时,我然后检索该数据(通过ConditionalWeakTable或等效查找)并在委托中使用它。

1 个答案:

答案 0 :(得分:1)

你要求的东西在执行时实际上没有意义。委托只是指向某个东西的指针,以便您以后可以执行它。

您无法获得上面使用的相同的参考 - 这只是一个您无法访问的本地变量。您可以做的最好(实际上是相同的)是获取当前对象实例并使用Delegate.CreateDelegate创建新的Action