3

我需要知道是否可以访问包含委托引用的方法的底层对象?

我知道该对象是在委托中捕获的,因为在调用该方法时它是必需的。

4

1 回答 1

5

ADelegate引用它的目标。当然,静态方法没有目标,因此可能需要进行空检查。

class Program
{
    static void Main(string[] args)
    {
        var container = new Container();

        Func<string> doSomething = container.DoSomething;

        Delegate d = doSomething;

        // This will be the container, but you need to cast.
        var c = (Container)d.Target;

        Console.Read();
    }
}

class Container
{
    public string DoSomething()
    {
        return "";
    }
}

我不确定您要通过此实现什么目标,但需要了解满足委托引用的目标类型可能是代码异味或设计问题的指标。

于 2013-05-08T10:04:27.147 回答