检查一个对象是否是委托对象

问题描述:

在.NET中,有没有办法检查对象是否是委托类型?检查一个对象是否是委托对象

我需要这个,因为我正在记录方法调用的参数,我想打印"(delegate)"所有参数是动作或函数。

这完全适用于我

class Test 
    { 
     public delegate void MyHandler(string x); 

     public void RunTest() 
     { 
      var del = new MyHandler(Method); 
      if (del is Delegate) 
      { 
       Console.WriteLine(@"del is a delegate."); 
      } 
      else 
      { 
       Console.WriteLine("del is not a delegate"); 
      } 

     } 

     private void Method(string myString) 
     { 
     } 
    } 

当然,同任何其他类型的:

if (foo is Delegate) 

或者某个类型:

if (typeof(Delegate).IsAssignableFrom(t)) 

你可以只检查是否obj is Delegate
所有委托类型都继承基类Delegate类。

是。检查该类型是否继承自System.Delegate。下面是一个工作示例,其中包含一些简单的测试,以确保我们有适当的代表对象:

using System; 

public class MyClass 
{ 
    delegate void DelegateType(); 
    public static void Main() 
    { 
     DelegateType obj = method; 
     obj.Method.Invoke(null, null); 

     if (obj is System.Delegate) 
      Console.WriteLine("Type is a delegate"); 
     else   
      Console.WriteLine("Type is NOT a delegate"); 
    } 

    private static void method() {Console.WriteLine("Invoked");} 
}