📜  C#中的Type.FindMembers()方法与示例(1)

📅  最后修改于: 2023-12-03 15:14:32.183000             🧑  作者: Mango

C#中的Type.FindMembers()方法与示例

简介

Type.FindMembers()是C#中的一个方法,用于获取指定类型的成员。成员可以是字段、属性、方法等。该方法可以根据指定的搜索条件返回类型的所有成员或者特定类型的成员。

语法

以下是Type.FindMembers()方法的语法:

public MemberInfo[] FindMembers(
    MemberTypes memberType,
    BindingFlags bindingAttr,
    MemberFilter filter,
    object filterCriteria
)
  • memberType:指定要筛选的成员类型,可以使用MemberTypes枚举的值,如MemberTypes.Field, MemberTypes.Property, MemberTypes.Method等。如果要获取所有成员,可以使用MemberTypes.All
  • bindingAttr:指定要筛选的成员的绑定属性,可以使用BindingFlags枚举的值,如BindingFlags.Public, BindingFlags.NonPublic, BindingFlags.Static, BindingFlags.Instance等。
  • filter:一个委托,用于自定义筛选逻辑,可以根据需要进行自行编写。
  • filterCriteria:一个对象,传递给筛选委托的参数。
示例

以下是一个示例,演示如何使用Type.FindMembers()方法来获取指定类型的所有公共方法:

using System;
using System.Reflection;

public class MyClass
{
    public void Method1() { }
    public void Method2() { }
    private void Method3() { }
}

public class Program
{
    public static void Main()
    {
        Type type = typeof(MyClass);
        MemberInfo[] methods = type.FindMembers(MemberTypes.Method,
                                               BindingFlags.Public | BindingFlags.Instance,
                                               null,
                                               null);
        foreach (MemberInfo method in methods)
        {
            Console.WriteLine(method.Name);
        }
    }
}

运行以上代码,将输出:

Method1
Method2

在上面的示例中,我们首先使用typeof()获取MyClassType。然后,我们使用FindMembers()方法获取MyClass类型的所有公共方法。 在这种情况下,我们传递了MemberTypes.Method作为memberType参数,以指示我们只想获取方法。BindingFlags.PublicBindingFlags.Instance作为bindingAttr参数,以指示我们只想获取公共实例方法。最后两个参数我们传递了null,表示不进行进一步的筛选。

总结

通过Type.FindMembers()方法,我们可以方便地获取指定类型的成员。我们可以根据需要使用不同的参数来筛选特定类型的成员。这对于动态地获取类型的成员,并在运行时进行处理非常有用。