Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การดึงสมาชิกทั้งหมดของ Type ปัจจุบันใน C#

ภาพรวม

เมธอด Type.GetMembers() คืนอาร์เรย์ MemberInfo[] ของสมาชิกทั้งหมด (public instance โดยค่าเริ่มต้น) รวมถึงเมธอด ฟิลด์ พร็อพเพอร์ตี イベント คอนสตรัคเตอร์ ฯลฯ

ตัวอย่างที่ 1: GetMembers() โดยไม่ระบุ 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();
            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.Public | BindingFlags.Instance

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

สรุป

  • GetMembers() คืนสมาชิก public instance ทั้งหมด (รวมสืบทอดจาก Object)
  • ใช้ BindingFlags กรอง: BindingFlags.Static, BindingFlags.NonPublic, BindingFlags.DeclaredOnly ฯลฯ
  • GetField ดึงเฉพาะฟิลด์