C#反射汇总

反射的定义

反射与特性Attribute息息相关

  • 定义:提供封装程序集、模块和类型的对象
    • 封装了程序的对象
    • 封装了模块的对象
    • 封装了类型的对象
  • 可以通过放射Type获取该类所在的程序集、模块、以及本身的类型
核心相关API
  1. 获取程序集API
  2. 获取类型API
  3. 实例化获取到的类型API
Type type = typeof(类的名字)  
Type type = 实例对象.GetType()
Type type = tt.GetType();
Console.WriteLine($"Assembly:       {type.Assembly}" );
Console.WriteLine($"Module:         {type.Module}");
Console.WriteLine($"Name:           {type.Name}");
Console.WriteLine($"FullName:       {type.FullName}");
Console.WriteLine($"IsClass:        {type.IsClass}");
Console.WriteLine($"IsNotPublic:    {type.IsNotPublic}");
Console.WriteLine($"Namespace:      {type.Namespace}");
Console.WriteLine($"IsAbstract:     {type.IsAbstract}");
Console.WriteLine($"IsValueType:    {type.IsValueType}");

Assembly:       010对象练习1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Module:         010对象练习1.exe
Name:           Ticket
FullName:       _010对象练习1.Ticket
IsClass:        True
IsNotPublic:    True
Namespace:      _010对象练习1
IsAbstract:     False
IsValueType:    False
type对象
  • 类信息查询API:获取类各种名字
  • 检测API:判断type的某些属性(是否抽象等等)
    • IsClass 是否是类
    • IsAbstract 是否是抽象的
    • IsValueType 是否是值类型
    • IsEnum 是否是枚举
  • 类接口查询:获取父类类型、获取方法、获取构造、获取成员变量等等
    • BaseType 获取父类的类型
    • GetMembers(BindingFlags) 获取所有方法
    • GetFields 获取所有字段(默认public成员变量)
    • GetProperties 获取所有属性器
    • GetMethods(BindingFlags) BindingFlags可以筛选查询结果 获取所有成员变量
      • BindingFlags.NonPublic
      • BindingFlags.Public
      • BindingFlags.DeclaredOnly 不包括父类的方法
      • BindingFlags.Instance 实例成员,即非静态方法
Methodinfo对象

作用:

  • 方法信息查询API
    • MethodInfo.Name
  • 方法检测API
    • methodInfo.IsGenericMethod 是否是泛型方法
    • methodInfo.IsAbstract 是否是抽象方法
    • methodInfo.IsConstructor 是否是构造方法
    • methodInfo.IsVirtual 是否是虚方法
    • methodInfo.IsPublic 是否是公开的方法
    • methodInfo.IsStatic 是否是静态方法
  • 方法结构查询API
    • methodInfo.GetBaseDefinition
    • methodInfo.ReturnType
    • methodInfo.GetParamters().Length
  • 调用方法API
    • Invoke(调用对象, 参数)
    • Invoke(调用对象, new object[]{})
FieldInfo对象
  • 信息查询
  • 检查API
    • IsInitOnly 是否是readonly
    • IsPublic
  • 结构查询API
    • FiledType
  • SetValue(对象,值)
  • GetValue(对象,值)
MemberInfo对象
  • 信息查询
  • 需要转换类型
PropertyInfo对象
  • 信息查询
  • 检查API
    • CanRead 是否有get
    • CanWrite 是否有set
  • 结构查询API
    • PropertyType 获取Property类型
  • SetValue(对象, 值)
  • GetValue(对象)
与Attribute配合使用
  • Assembly相关API
 Assembly.LoadFile(fullPath) 加载dll
 assembly.GetType(TypeName) 获取类型
 Activator.CreateInstance(type) 创建实例
 assembly.CreateInstance(typeName) 根据反射名字创建实例
总结
  • Tyep获取方式
    • typeof(ClassName)
    • object.GetType()
    • Type.GetType(name) name = "命名空间+类名"OFramework+SomeClass“”
  • Type对象的API
    • 类信息查询API
    • 检测API
    • 类结构查询API
    • BindingFlags
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值