C# 反射 学习理解记录

反射 在ORM / ABP框架里有大量运用,

它可以使得你可以访问一个对象的属性、函数,甚至是私有的

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

自定义一个StudentInfo类。

/l通过typeof 运算符获取Type类型,

Type type1 = typeof(StudentInfo);

//通过实例对象获取类型

StudentInfo obj = new StudentInfo();

Type type2=obj.GetType();// GetType 其实是Object 这个类的方法

/// <summary>

/// 获取属性

/// </summary>

public void TestProperty()

{

Type type1 = typeof(StudentInfo);

//批量获取

var propertyInfos= type1.GetProperties();

foreach (var propertyInfo in propertyInfos)

{

Console.WriteLine($", 类型:{propertyInfo.Name}, 类型:{propertyInfo.PropertyType}");

}

//指定获取

Console.WriteLine($"---{type1.GetProperty("Age")}, Name:{type1.GetProperty("Age").Name}, 类型:{type1.GetProperty("Age").PropertyType}");

}

/// <summary>

/// 获取字段,包含私有字段

/// </summary>

public void TestField()

{

Type type1 = typeof(StudentInfo);

//批量获取

var fieldInfos = type1.GetFields(BindingFlags.Instance|BindingFlags.NonPublic); //BindingFlags.Public|BindingFlags.NonPublic 二级制位运算,有1即1, 如果加上BindingFlags.Public则是共有私有都获取

foreach (var fieldInfo in fieldInfos)

{

Console.WriteLine($" name:{fieldInfo.Name}, 类型:{fieldInfo.FieldType}");

}

//获取单个,字段一般是私有的,默认是公有的,加参数才能获取

var fieldInfo2 = type1.GetField("_age",BindingFlags.Instance|BindingFlags.NonPublic);

Console.WriteLine($"单个输出=》 name:{fieldInfo2.Name}, 类型:{fieldInfo2.FieldType}");

}

到泛型和框架时才体现运用场景,目前只有socket通信时,一个程序以字符串来动态调用另一个程序的函数执行时可用

详细信息:

利用反射创建对象,框架才经常用到 ,创建对象时不一定知道类型(使用了泛型)?

var tp = typeof(StudentInfo);

var obj = Activator.CreateInstance(tp); //一个对象被创建,只能是构造函数被调用,这里底层原理也是,带参的构造函数可以加参数CreateInstance(tp,参数1,参数2)

//设置属性

var age=obj.getProperty("Age");

obj.setValue(age,12);

很多个程序集加到IOC容器里面去时才用到,做个了解。

object obj= assemb1y1.CreateInstance("命名空间.类名",false); 第二个参数不能填null

反射 操作函数,扩展函数等待学。

------学习自抖音视频-誉尚学教育 "阶段三 C#高级" 合集

相关推荐
zhangrelay5 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
叼烟扛炮9 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
辣知12 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金12 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
kyrie_sakura13 小时前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
宝绿特塑业再生科技14 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~15 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
我命由我1234517 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
外收内放17 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi