2011-04-28 28 views
11

En .NET, ¿hay alguna forma de comprobar si un objeto es de tipo delegado?Compruebe si un objeto es un delegado

Lo necesito porque estoy registrando los parámetros de las llamadas a métodos, y quiero imprimir "(delegate)" para todos los parámetros que son acciones o funciones.

Respuesta

4

Esto funciona perfectamente para mí

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) 
     { 
     } 
    } 
23

Claro, igual que con cualquier otro tipo:

if (foo is Delegate) 

O para un tipo:

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

puede simplemente comprobar si obj is Delegate.
Todos los tipos de delegado heredan la clase base Delegate.

1

Sí. Verifique si el tipo hereda de System.Delegate. Aquí hay una muestra de trabajo con algunas pruebas simples introducidas para asegurarse de que tenemos un objeto de delegado apropiado:

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");} 
} 
Cuestiones relacionadas