【发布时间】:2011-04-28 14:05:14
【问题描述】:
在 .NET 中,有没有办法检查对象是否属于委托类型?
我需要这个,因为我正在记录方法调用的参数,并且我想为所有作为操作或函数的参数打印 "(delegate)"。
【问题讨论】:
在 .NET 中,有没有办法检查对象是否属于委托类型?
我需要这个,因为我正在记录方法调用的参数,并且我想为所有作为操作或函数的参数打印 "(delegate)"。
【问题讨论】:
当然,和其他类型一样:
if (foo is Delegate)
或者对于一个类型:
if (typeof(Delegate).IsAssignableFrom(t))
【讨论】:
这对我很有效
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)
{
}
}
【讨论】:
你可以只检查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");}
}
【讨论】: