using System;
using System.Reflection;public class MyClass
{public int MyField;public int MyProperty { get; set; }public void MyMethod() { }
}class Program
{static void Main(){Type type = typeof(MyClass);// 获取字段FieldInfo fieldInfo = type.GetField("MyField");Console.WriteLine("Field: " + fieldInfo.Name);// 获取属性PropertyInfo propertyInfo = type.GetProperty("MyProperty");Console.WriteLine("Property: " + propertyInfo.Name);// 获取方法MethodInfo methodInfo = type.GetMethod("MyMethod");Console.WriteLine("Method: " + methodInfo.Name);}
}
只搜索在当前类型中声明的成员,不包括继承的成员:BindingFlags.DeclaredOnly
FieldInfo[] fields = type.GetFields(BindingFlags.DeclaredOnly);
BindingFlags各个枚举含义:
Default:表示使用默认的绑定规则,不指定任何特殊的标志。
IgnoreCase:表示忽略成员名称的大小写。
DeclaredOnly:表示只搜索在当前类型中声明的成员,不包括继承的成员。
Instance:表示搜索实例成员,即非静态的成员。
Static:表示搜索静态成员,即类级别的成员。
Public:表示搜索公共成员,即访问修饰符为public的成员。
NonPublic:表示搜索非公共成员,即访问修饰符为internal、protected或private的成员。
FlattenHierarchy:表示在搜索静态成员时,包括从基类继承的公共和受保护的静态成员,但不包括私有的静态成员和嵌套类型。
InvokeMethod:表示要调用一个方法,可以是构造函数、实例方法或静态方法。
CreateInstance:表示要创建一个类型的实例,调用与给定参数匹配的构造函数。
GetField:表示要获取一个字段的值,可以是实例字段或静态字段。
SetField:表示要设置一个字段的值,可以是实例字段或静态字段。
GetProperty:表示要获取一个属性的值,可以是实例属性或静态属性。
SetProperty:表示要设置一个属性的值,可以是实例属性或静态属性。
PutDispProperty:表示要调用一个COM对象上的PROPPUT成员,用于设置一个属性的值。
PutRefDispProperty:表示要调用一个COM对象上的PROPPUTREF成员,用于设置一个引用类型的属性的值。
ExactBinding:表示要求提供的参数类型必须与对应形参类型完全匹配,不允许进行类型转换。
SuppressChangeType:表示禁止进行类型转换,仅在COM互操作中使用。
OptionalParamBinding:表示返回参数数量与提供的参数数量匹配的成员集合,用于处理具有默认值或可变参数的方法。
IgnoreReturn:表示忽略方法的返回值,在COM互操作中使用。
DoNotWrapExceptions:表示不要将反射调用方法时产生的异常包装在TargetInvocationException中。