随笔分类 -  11-反射

摘要:概述 .Net中提供了两种方式访问类型的元数据:System.Reflection命名空间中提供的反射API和TypeDescriptor类。 反射适用于所有类型的常规机制,它为类型返回的信息是不可扩展的,因为它不能再编译之后修改。 与此相反,TypeDescriptor是一种可扩展的组件,实现了I 阅读全文
posted @ 2022-04-12 20:32 .Neterr 阅读(180) 评论(0) 推荐(0) 编辑
摘要:基于封装的原则,API 的设计者会将部分成员(属性、字段、方法等)隐藏以保证健壮性。但总有需要直接访问这些私有成员的情况。 为了访问一个类型的私有成员,除了更改 API 设计还有就是使用反射技术: public class MyApi { public MyApi() { _createdAt = 阅读全文
posted @ 2022-03-13 00:07 .Neterr 阅读(59) 评论(0) 推荐(0) 编辑
摘要:Main方法: static async Task Main(string[] args) { Type personType = typeof(Person); var person = Activator.CreateInstance(personType); //调用同步方法,如果有同名方法, 阅读全文
posted @ 2021-05-21 11:46 .Neterr 阅读(180) 评论(0) 推荐(0) 编辑
摘要:用于将Type和Type名称相互转化 public class TypeNameSerializer { private readonly ConcurrentDictionary<Type, string> serializedTypes = new ConcurrentDictionary<Ty 阅读全文
posted @ 2020-09-16 18:50 .Neterr 阅读(214) 评论(0) 推荐(0) 编辑
摘要:官方msdn地址介绍: https://docs.microsoft.com/zh-cn/dotnet/api/system.reflection.emit?view=netframework-4.8 https://docs.microsoft.com/zh-cn/dotnet/api/syste 阅读全文
posted @ 2020-09-04 12:00 .Neterr 阅读(401) 评论(0) 推荐(0) 编辑
摘要:1 /// <summary> /// Type 拓展 /// </summary> public static class TypeExtensions { /// <summary> /// 确定当前实例是否是继承或者实现某个Type /// </summary> /// <param name 阅读全文
posted @ 2020-08-27 10:14 .Neterr 阅读(160) 评论(0) 推荐(0) 编辑
摘要:本篇是我学习反射的一个应用小场景而做的学习笔记,主要是一个小的总结 使用技术:泛型、反射、表达式树... 客户端调用: static void Main(string[] args) { var connection = new SqlConnection("Data Source=.;User I 阅读全文
posted @ 2020-04-27 17:54 .Neterr 阅读(497) 评论(0) 推荐(1) 编辑
摘要:反射获取泛型类、泛型方法 1 using System; 2 using System.Reflection; 3 4 namespace RFTest 5 { 6 //类ReflectionTest中定义了一个泛型函数DisplayType和泛型类MyGenericClass 7 class Re 阅读全文
posted @ 2019-12-03 22:31 .Neterr 阅读(1738) 评论(1) 推荐(0) 编辑
摘要:只是演示反射的用法,使用反射的方式性能不好,可以使用表达式树的方式做对象映射。查看Linq分类里有相关文章 Mapper: public class Mapper { private static ConcurrentDictionary<Type, PropertyInfo[]> PROPTY_C 阅读全文
posted @ 2019-12-03 10:48 .Neterr 阅读(641) 评论(0) 推荐(0) 编辑
摘要:public enum EJobType { 客服 = 1, 业务员 = 2, 财务 = 3, 经理 = 4 } Type jobType = typeof(EJobType); 方式1: Array enumItems = Enum.GetValues(jobType); foreach (var 阅读全文
posted @ 2019-12-03 09:42 .Neterr 阅读(4494) 评论(0) 推荐(0) 编辑
摘要:Assembly 加载程序集的3中方式 //1.1 Load方法:动态默认加载当前路径下的(bin)下的dll文件,不需要后缀 Assembly assembly = Assembly.Load("DB.SQLServer"); //1.2 LoadFile方法:程序集的绝对路径 Assembly 阅读全文
posted @ 2019-11-30 06:21 .Neterr 阅读(350) 评论(0) 推荐(1) 编辑