2013-05-08 72 views
3

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

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

+0

我不太确定该对象的实例是否在委托中被捕获(我认为您的意思是委托对象具有对该对象的引用) - 如果是,那么为什么您需要将它传入何时调用委托? – GHC 2013-05-08 10:03:18

回答

5

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

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 ""; 
    } 
} 

我不知道你想什么来实现这一点,但需要了解的是正在履行一个代表的参考可能是一个代码气味或设计问题的指标目标类型。