C# 反射(一)基础概念
创始人
2024-03-16 01:23:44

一、C# 反射(refection)基础概念

反射指程序可以访问、检测和修改它本身状态或行为的一种能力。

程序集包含模块,而模块包含类型,类型又包含成员。

反射则提供了封装程序集、模块和类型的对象。

您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

反射提供了封装程序集、模块和类型的对象(反射的层次模型为:程序集包含模块,而模块包含类型,类型又包含成员【成员--->类型--->模块--->程序集】)其中类型可以是(类、结构、枚举)。

 

优缺点

优点:

  • 1、反射提高了程序的灵活性和扩展性
  • 2、降低耦合性,提高自适应能力。
  • 3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点:

  • 1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
  • 2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

二、C# 反射的使用场景

  • 它允许在运行时查看特性(attribute)信息。
  • 它允许审查集合中的各种类型,以及实例化这些类型。
  • 它允许延迟绑定的方法和属性(property)。
  • 它允许在运行时创建新类型,然后使用这些类型执行一些任务。

三、C# 反射获取类型方式

1.类型:Type

1    
//通过Typeof获取某个值的类型System.Type type = typeof(PeopleInfo);2    
//通过GetType获取对象类型PeopleInfo peopleInfo = new PeopleInfo();
peopleInfo.Age = 23;
System.Type type1 = peopleInfo.GetType();
System.Type type2 = peopleInfo.Age.GetType();3    
//通过GetType获取类名称类型System.Type type = System.Type.GetType("Test_Reflection.PeopleInfo");

2.成员:MethodInfo ,方法,字段,属性

成员字段:FieldInfo 

成员属性:PropertyInfo

3.实例化:Activator 获取反射类型的三种方式
序号    获取反射类型的三种方式

Activator反射不同的构造进行实例化对象

序号    Activator方法    说明
1    CreateInstance(Type t)    使用默认Public修饰的无参数构造实例化对象
2    CreateInstance(Type,bool nonPublic)    使用Private修饰的无参构造实例化对象
3    CreateInstance(Type type, params object?[]? args)    使用Public修饰的有参构造实例化对象
4    CreateInstance(Type type, object?[]? args, object?[]? activationAttributes)    使用Public修饰的有参构造和公有属性实例化对象
5    CreateInstance(Type type, BindingFlags bindingAttr, Binder? binder, object?[]? args, CultureInfo? culture)    使用指定的BindingFlags组合,可选有无参数构造实例化对象

使用的命名空间
使用反射需要引用命名空间【using System.reflection】,这个命名空间包含如下的类:

System.Reflection命名空间包含的主要类
 

序号    System.Reflection命名空间包含的主要类(反射涉及到的类)
1    System.Reflection.Assembly 
2    System.Reflection.MemberInfo
3    System.Reflection.EventInfo
4    System.Reflection.FieldInfo
5    System.Reflection.MethodBase
6    System.Reflection.ConstructorInfo
7    System.Reflection.MethodInfo
8    System.Reflection.PropertyInfo
9    System.Type   

更多:

C# 合并对象_C# 对象合并整理

EfCore 表关系一对一,使用案例

C# IO Stream 流(二)扩展类_封装器

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...