.Net之美读书笔记15
.Net反射
.Net 反射为:程序运行时,获取类型的元数据(对类型信息的描述)。这里对反射的应用小节一下。
反射的入口(Type)
Type
为处理反射元数据的类。获取Type
的途径。
Type ty = Type.GetType("System.Int32");
Type type = swim.GetType();
typeof(int);
获取类型的基本信息
获取类型相关的信息:类型名、类型全名、基类名以及对类型的一些判断IsXXX
Type type = typeof(int);
Console.WriteLine(type.Name);
Console.WriteLine(type.FullName);
Console.WriteLine(type.BaseType.Name);
Console.WriteLine(type.IsInterface);
Console.WriteLine(type.IsClass);
获取类型的成员
MemberInfo 包括属性、字段、函数、事件等
MemberInfo[] memberInfo = type.GetMembers();
foreach (MemberInfo mi in memberInfo)
{
Console.WriteLine(mi.Name);
}
Console.WriteLine("********************");
FieldInfo[] fieldInfo = type.GetFields();
foreach(FieldInfo fi in fieldInfo)
{
Console.WriteLine(fi.Name);
}
Console.WriteLine("********************");
PropertyInfo[] propertyInfo = type.GetProperties();
foreach(PropertyInfo pi in propertyInfo)
{
Console.WriteLine(pi.Name);
}
Console.WriteLine("********************");
MethodInfo[] method = type.GetMethods();
foreach (MethodInfo md in method)
{
Console.WriteLine(md.Name);
}
反射创建实体
新建类Person
public class Person
{
public string ID { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public DateTime Birthday { get; set; }
public virtual void Study()
{
Console.WriteLine("I am a person.I must study!");
}
}
- 根据类型动态创建方法1
Type type = typeof(Person);
Assembly asm = Assembly.GetExecutingAssembly();
object obj1 = asm.CreateInstance(type.FullName);
- 方法二
object obj2 = Activator.CreateInstance(null, type.FullName).Unwrap();
- 动态调用方法1
type.InvokeMember("Study", BindingFlags.InvokeMethod, null, obj1, null);
- 动态调用方法二
MethodInfo mi1 = type.GetMethod("Study");
mi1.Invoke(obj2,null);
- 动态修改属性值与取值
PropertyInfo pi1 = type.GetProperty("Name");
pi1.SetValue(obj1, "Hello World!");
Console.WriteLine(pi1.GetValue(obj1));
程序集的反射
获取程序集的方式:Assembly asm = Assembly.LoadFrom("Demo.dll")
.程序集写有模块,通过反射可以得到程序集信息。
特性(Attribute)
- 继承System.Attribute类,要自定义特性类添加Attribute后缀
- 获取属性的自定义特性
GetCustomAttributes()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)