В .NET, Есть ли способ проверить, является ли объект типом делегата?
Мне нужно это, потому что я регистрирую параметры вызовов методов, и я хочу напечатать "(delegate)"
для всех параметров, которые являются действиями или функциями.
В .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");}
}