C# 反射
2021-03-03 21:28
标签:调用dll eth script sem people short foreach 加载 vat 一.反射 1>反射的命名空间是System.Reflection 2>是.Net框架提供的帮助类库,读取并使用matedata 二.反射基本用法 举例如下 1>Assembly assembly Assembly.Load("DB.MySql");//1.反射加载DLL (DLL名称是DB.MySql),用Assembly动态加载程序集 2>Type type = assembly.GetType("DB.MySql.MySqlHelper");//2.获取类型信息(命名空间+类名 :DB.MySql+MySqlHelper) 3>object oDBHelper = Activator.CreateInstance(type);//3. 用Activator创建对象 4>IDBHelper iDBHelper = (IDBHelper)oDBHelper;//4 类型转换,把object对象oDBHelper,通过强制转换为接口IDBHelper 5>iDBHelper.Query();//5 方法调用,传建好了接口对象iDBHelper,调用方法Query() 三.反射用在哪里 主流框架MVC,IOC,ORM和DOT模型都在用反射,反射最主要的特点就是“动态” 1>IOC(IOC=简单工厂+配置文件+反射) -之前调用dll,都是先引用dll,添加命名空间,然后创建对象。现在可以动态加载dll,动态获取类型,动态创建对象。 IDBHelper iDBHeler = Factory.CreateHelper();//Factory工厂主要作用是创建对象 2>MVC(主要是通过反射,调用方法) MVC是通过反射,创建对象,然后通过方法名称,达到调用方法的目的 下面这个类,是反射测试类 3>ORM(通过反射,调用属性和字段或者设置属性的值) 下面是people实体类 C# 反射 标签:调用dll eth script sem people short foreach 加载 vat 原文地址:https://www.cnblogs.com/dfcq/p/12965055.html
iDBHeler.Query();//可以调用对象的方法了,反射是动态的 依赖的是字符串 1 ///
1 //MVC 类名称+方法名称 3 Assembly assembly = Assembly.Load("DB.SqlServer");
4 Type type = assembly.GetType("DB.SqlServer.ReflectionTest");
5 object oReflectionTest = Activator.CreateInstance(type);
6 {
7 MethodInfo method = type.GetMethod("Show4", BindingFlags.Instance | BindingFlags.NonPublic);//Show4的访问修饰符是Private
8 method.Invoke(oReflectionTest, new object[] { "4" });
9 }
10 {
11 MethodInfo method = type.GetMethod("Show1");//调用无参数方法
12 method.Invoke(oReflectionTest, null);
13 }
14 {
15 MethodInfo method = type.GetMethod("Show2");//调用有参数方法(拿int举例)
16 method.Invoke(oReflectionTest, new object[] { 123 });
17 }
18 {
19 MethodInfo method = type.GetMethod("Show5");
20 method.Invoke(oReflectionTest, new object[] { "麦田的稻草人" });//调用静态方法,Show5是静态方法,第一个object对象传入不传入都可以
21 method.Invoke(null, new object[] { "果然" });
22 }
23 {
24 MethodInfo method = type.GetMethod("Show3", new Type[] { });//调用重载方法,Show3是重载方法
25 method.Invoke(oReflectionTest, new object[] { });
26 }
27 {
28 MethodInfo method = type.GetMethod("Show3", new Type[] { typeof(int) });
29 method.Invoke(oReflectionTest, new object[] { 123 });
30 }
31 {
32 MethodInfo method = type.GetMethod("Show3", new Type[] { typeof(string) });
33 method.Invoke(oReflectionTest, new object[] { "Ant" });
34 }
35 {
36 MethodInfo method = type.GetMethod("Show3", new Type[] { typeof(int), typeof(string) });
37 method.Invoke(oReflectionTest, new object[] { 234, "W" });
38 }
39 {
40 MethodInfo method = type.GetMethod("Show3", new Type[] { typeof(string), typeof(int) });
41 method.Invoke(oReflectionTest, new object[] { "W", 234 });
42 }
1 ///
1 People people = new People();
2 people.Id = 123;
3 people.Name = "Look";
4 people.Description = "二年级学生";
5 {
6 Type typePeople = typeof(People);
7 Type typePeopleDTO = typeof(PeopleDTO);
8 object peopleDTO = Activator.CreateInstance(typePeopleDTO);
9 foreach (var prop in typePeopleDTO.GetProperties())
10 {
11 object value = typePeople.GetProperty(prop.Name).GetValue(people);
12 prop.SetValue(peopleDTO, value);
13 }
14 foreach (var filed in typePeopleDTO.GetFields())
15 {
16 object value = typePeople.GetField(filed.Name).GetValue(people);
17 filed.SetValue(peopleDTO, value);
18 }
19 }
1 ///