Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C#

C# में वर्तमान टाइप के मेंबर्स कैसे प्राप्त करें

रिफ्लेक्शन का उपयोग करके वर्तमान टाइप के सभी मेंबर्स (फील्ड्स, प्रॉपर्टीज, मेथड्स, कंस्ट्रक्टर्स, इवेंट्स) प्राप्त करने के लिए Type.GetMembers() मेथड का उपयोग करें।

सिंटैक्स

public MemberInfo[] GetMembers();
public MemberInfo[] GetMembers(BindingFlags bindingAttr);

उदाहरण 1: सभी पब्लिक मेंबर्स (डिफ़ॉल्ट)

using System;
using System.Reflection;

public class Demo {
    public static void Main() {
        Type type = typeof(Subject);
        
        try {
            FieldInfo fieldInfo = type.GetField("SubName");
            MemberInfo[] info = type.GetMembers();
            
            Console.Write("Members = ");
            for (int i = 0; i < info.Length; i++) {
                Console.WriteLine(" {0}", info[i]);
            }
            Console.WriteLine("FieldInfo = {0}", fieldInfo);
        }
        catch (ArgumentNullException e) {
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

public class Subject {
    public string SubName = "Science";
}

आउटपुट

Members = 
System.String ToString()
Boolean Equals(System.Object)
Int32 GetHashCode()
System.Type GetType()
Void .ctor()
System.String SubName
FieldInfo = System.String SubName

उदाहरण 2: BindingFlags के साथ फिल्टरिंग

using System;
using System.Reflection;

public class Demo {
    public static void Main() {
        Type type = typeof(Subject);
        
        try {
            FieldInfo fieldInfo = type.GetField("SubName");
            // केवल पब्लिक इंस्टेंस मेंबर्स
            MemberInfo[] info = type.GetMembers(BindingFlags.Public | BindingFlags.Instance);
            
            Console.Write("Members = ");
            for (int i = 0; i < info.Length; i++) {
                Console.WriteLine(" {0}", info[i]);
            }
            Console.WriteLine("FieldInfo = {0}", fieldInfo);
        }
        catch (ArgumentNullException e) {
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

public class Subject {
    public string SubName = "Science";
}

आउटपुट

Members = 
System.String ToString()
Boolean Equals(System.Object)
Int32 GetHashCode()
System.Type GetType()
Void .ctor()
System.String SubName
FieldInfo = System.String SubName

BindingFlags संयोजन

फ्लैगविवरण
BindingFlags.Publicपब्लिक मेंबर्स शामिल करें
BindingFlags.NonPublicनॉन-पब्लिक मेंबर्स शामिल करें
BindingFlags.Instanceइंस्टेंस मेंबर्स शामिल करें
BindingFlags.Staticस्टेटिक मेंबर्स शामिल करें
BindingFlags.DeclaredOnlyकेवल इस टाइप में डिक्लेयर्ड (इनहेरिटेड नहीं)
BindingFlags.FlattenHierarchyइनहेरिटेंस हायरार्की में स्टेटिक मेंबर्स शामिल करें

विशिष्ट मेंबर टाइप्स प्राप्त करना

Type type = typeof(MyClass);

// केवल मेथड्स
MethodInfo[] methods = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);

// केवल प्रॉपर्टीज
PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

// केवल फील्ड्स
FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance);

// केवल कंस्ट्रक्टर्स
ConstructorInfo[] constructors = type.GetConstructors(BindingFlags.Public | BindingFlags.Instance);

// केवल इवेंट्स
EventInfo[] events = type.GetEvents(BindingFlags.Public | BindingFlags.Instance);

MemberInfo सामान्य गुण

  • Name - मेंबर का नाम
  • MemberType - मेंबर टाइप (Method, Property, Field, आदि)
  • DeclaringType - मेंबर डिक्लेयर करने वाला टाइप
  • ReflectedType - रिफ्लेक्शन के माध्यम से प्राप्त टाइप
  • MetadataToken - मेटाडेटा टोकन

कस्टम एट्रिब्यूट्स पढ़ना

var attributes = type.GetCustomAttributes(typeof(ObsoleteAttribute), false);
foreach (ObsoleteAttribute attr in attributes) {
    Console.WriteLine($"Obsolete: {attr.Message}");
}
  1. - C# में वर्तमान एन्यूमरेशन प्रकार के सदस्यों के नाम प्राप्त करें

    Type.GetEnumNames() मेथड एन्यूमरेशन स्थिरांक के नामों का एक सरणी लौटाता है। यह केवल एनम प्रकारों पर काम करता है; अन्यथा ArgumentException फेंकता है। उदाहरण 1: गैर-एनम प्रकार (string) using System; public class Demo { enum Vehicle { Car, Bus, Bike } public static void Main() { tr

  1. - C# में वर्तमान इंस्टेंस का प्रकार प्राप्त करें

    C# में किसी ऑब्जेक्ट के वर्तमान इंस्टेंस का प्रकार प्राप्त करने के लिए, हम GetType() मेथड का उपयोग करते हैं। यह मेथड System.Object से विरासत में मिला है और ऑब्जेक्ट के रनटाइम प्रकार को दर्शाने वाला Type ऑब्जेक्ट लौटाता है। यह रिफ्लेक्शन और डिबगिंग के लिए उपयोगी है। उदाहरण 1: स्ट्रिंग का प्रकार प्र

  1. - C# में Enum.GetType(): एन्यूमरेशन का प्रकार प्राप्त करना

    GetType() मेथड किसी भी ऑब्जेक्ट का रनटाइम टाइप लौटाता है। एनम मानों पर उपयोग करके उनका एन्यूमरेशन टाइप और अंतर्निहित टाइप जान सकते हैं। उदाहरण using System; public class Demo { public static void Main() { Enum[] values = { ConsoleColor.Blue, DayOfWeek.Sunday }; Co