检查对象是否是委托

时间:2011-04-28 14:05:15

标签: c# .net delegates

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

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

4 个答案:

答案 0 :(得分:26)

当然,与任何其他类型相同:

if (foo is Delegate)

或者类型:

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

答案 1 :(得分:5)

这对我来说很完美

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

答案 2 :(得分:2)

您可以查看是否obj is Delegate 所有委托类型都继承基类Delegate类。

答案 3 :(得分:1)

是。检查类型是否继承自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");}
}