反射简述
反射,允许获取有关加载程序集及其定义的类型的信息,例如类,接口和值类型(即结构和枚举)。 还可以使用反射在运行时创建类型实例,以及调用和访问它们。
查看类型信息
主要使用System.Type下的相关内容。 Type是一个类,包含类的所有信息,包含各种成员方法,成员属性等
主要使用下面两种方式得到某类型的Type
typeof()object.GetType()
假设已获得类型的Type类,可以通过GetMembers()获得所有内容—— 包括字段、方法、属性等,返回MemberInfo类型
可以指定BingFlags来确定可见性
获取成员
使用
- GetField 获得字段
CSharp
FieldInfo? f = type.GetField("intPro");
if (f != null)
{
Console.WriteLine($"Field: {f.Name}, Type: {f.FieldType} Value:{f.GetValue(instance)}");
}
f?.SetValue(instance, 1145);- GetMethod 获得方法
CSharp
MethodInfo? methodInfo = type.GetMethod("Show", BindingFlags.NonPublic | BindingFlags.Instance);
methodInfo?.Invoke(instance, null);其中instance表示已经实例化的对象