📜  C#| Type.GetMembers()方法

📅  最后修改于: 2021-05-29 20:19:28             🧑  作者: Mango

Type.GetMembers()方法用于获取当前Type的成员(属性,方法,字段,事件等)。此方法的重载列表中有2种方法,如下所示:

  • GetMembers()方法
  • GetMembers(BindingFlags)方法

GetMembers()方法

此方法用于返回当前Type的所有公共成员。

下面的程序说明了Type.GetMembers()方法的用法:

范例1:

// C# program to demonstrate the
// Type.GetMember() Method
using System;
using System.Globalization;
using System.Reflection;
  
// Defining Empty class
public class Empty { }
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        // Declaring and initializing object of Type
        Type objType = typeof(Empty);
  
        // try-catch block for handling Exception
        try {
  
            // Getting array of MemberInfos by
            // using GetMembers() Method
            MemberInfo[] info = objType.GetMembers();
  
            // Display the Result
            Console.WriteLine("Fields of current type is as Follow: ");
  
            for (int i = 0; i < info.Length; i++)
                Console.WriteLine(" {0}", info[i]);
        }
  
        // catch ArgumentNullException here
        catch (ArgumentNullException e) 
        {
            Console.Write("name is null.");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}
输出:
Fields of current type is as Follow: 
 Boolean Equals(System.Object)
 Int32 GetHashCode()
 System.Type GetType()
 System.String ToString()
 Void .ctor()

范例2:

// C# program to demonstrate the
// Type.GetMember() Method
using System;
using System.Globalization;
using System.Reflection;
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        // Declaring and initializing object of Type
        Type objType = typeof(int);
  
        // try-catch block for handling Exception
        try {
  
            // Getting array of MemberInfos by
            // using GetMembers() Method
            MemberInfo[] info = objType.GetMembers();
  
            // Display the Result
            Console.WriteLine("Fields of current type is as Follow: ");
            for (int i = 0; i < 6; i++)
                Console.WriteLine(" {0}", info[i]);
        }
  
        // catch ArgumentNullException here
        catch (ArgumentNullException e) {
            Console.Write("name is null.");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}
输出:
Fields of current type is as Follow: 
 Int32 CompareTo(System.Object)
 Int32 CompareTo(Int32)
 Boolean Equals(System.Object)
 Boolean Equals(Int32)
 Int32 GetHashCode()
 System.String ToString()

GetMembers(BindingFlags)方法

当在派生类中重写时,此方法用于使用指定的绑定约束来搜索为当前Type定义的成员。

返回值:该方法返回一个MemberInfo对象的数组,该对象表示为当前Type定义的所有与指定绑定约束匹配的成员;或者,如果没有为当前Type定义成员,或者没有定义的成员,则为MemberInfo类型的空数组匹配绑定约束。

下面的程序说明了上述方法的用法:

范例1:

// C# program to demonstrate the
// Type.GetMembers(BindingFlags)
// Method
using System;
using System.Globalization;
using System.Reflection;
  
// Defining class Empty
public class Empty { }
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        // Declaring and initializing object of Type
        Type objType = typeof(Empty);
  
        // try-catch block for handling Exception
        try {
  
            // Getting array of Fields by
            // using GetField() Method
            MemberInfo[] info = objType.GetMembers(BindingFlags.Public
                                                   | BindingFlags.Instance);
  
            // Display the Result
            Console.WriteLine("Fields of current type is as Follow: ");
            for (int i = 0; i < info.Length; i++)
                Console.WriteLine(" {0}", info[i]);
        }
  
        // catch ArgumentNullException here
        catch (ArgumentNullException e) {
            Console.WriteLine("name is null.");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}
输出:
Fields of current type is as Follow: 
 Boolean Equals(System.Object)
 Int32 GetHashCode()
 System.Type GetType()
 System.String ToString()
 Void .ctor()

范例2:

// C# program to demonstrate the
// Type.GetMembers(BindingFlags)
// Method
using System;
using System.Globalization;
using System.Reflection;
  
// Defining class Empty
public class Empty { }
  
class GFG {
  
    // Main Method
    public static void Main()
    {
        // Declaring and initializing object of Type
        Type objType = typeof(int);
  
        // try-catch block for handling Exception
        try {
  
            // Getting array of Fields by
            // using GetField() Method
            MemberInfo[] info = objType.GetMembers(BindingFlags.Public
                                                   | BindingFlags.Static);
  
            // Display the Result
            Console.WriteLine("Fields of current type is as Follow: ");
            for (int i = 0; i < info.Length; i++)
                Console.WriteLine(" {0}", info[i]);
        }
  
        // catch ArgumentNullException here
        catch (ArgumentNullException e) 
        {
            Console.WriteLine("name is null.");
            Console.Write("Exception Thrown: ");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}
输出:
Fields of current type is as Follow: 
 Int32 Parse(System.String)
 Int32 Parse(System.String, System.Globalization.NumberStyles)
 Int32 Parse(System.String, System.IFormatProvider)
 Int32 Parse(System.String, System.Globalization.NumberStyles, System.IFormatProvider)
 Boolean TryParse(System.String, Int32 ByRef)
 Boolean TryParse(System.String, System.Globalization.NumberStyles, System.IFormatProvider, Int32 ByRef)
 System.Int32 MaxValue
 System.Int32 MinValue

参考:

  • https://docs.microsoft.com/zh-cn/dotnet/api/system.type.getmembers?view=netframework-4.8