2011-04-28 20 views
11

.NET में है, तो यह जांचने का कोई तरीका है कि कोई ऑब्जेक्ट किसी प्रतिनिधि प्रकार का है या नहीं?जांचें कि कोई ऑब्जेक्ट एक प्रतिनिधि

मुझे इसकी आवश्यकता है क्योंकि मैं विधि कॉल के पैरामीटर लॉगिंग कर रहा हूं, और मैं सभी पैरामीटर के लिए "(delegate)" प्रिंट करना चाहता हूं जो कार्य या कार्य हैं।

उत्तर

4

यह मैं

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

ज़रूर, किसी भी अन्य प्रकार के साथ के रूप में ही:

if (foo is Delegate) 

या एक प्रकार के लिए:

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

तुम बस कि क्या obj is Delegate देख सकते हैं।
सभी प्रतिनिधि प्रकार आधार Delegate कक्षा का उत्तराधिकारी हैं।

1

हाँ के लिए पूरी तरह से काम करता है। यह देखने के लिए जांचें कि किस प्रकार सिस्टम से प्राप्त होता है। डिलीगेट। यह सुनिश्चित करने के लिए यहां एक सरल नमूना है जिसमें हमारे पास एक उचित प्रतिनिधि वस्तु है:

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");} 
} 
संबंधित मुद्दे