【问题标题】:Check if an object is a delegate检查对象是否为委托
【发布时间】:2011-04-28 14:05:14
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net delegates


    【解决方案1】:

    当然,和其他类型一样:

    if (foo is Delegate)
    

    或者对于一个类型:

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

    【讨论】:

      【解决方案2】:

      这对我很有效

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-23
            • 1970-01-01
            • 2022-01-17
            • 2017-05-18
            相关资源
            最近更新 更多