रिफ्लेक्शन का उपयोग करके वर्तमान टाइप के सभी मेंबर्स (फील्ड्स, प्रॉपर्टीज, मेथड्स, कंस्ट्रक्टर्स, इवेंट्स) प्राप्त करने के लिए 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}");
}