反射提供描述程序集、模块和类型的对象(Type 类型)。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后调用其方法或访问器字段和属性。 如果代码中使用了特性,可以利用反射来访问它们。 有关更多信息,请参阅特性。
- /***
- * Title:"测试反射" 项目
- * 主题:人员信息
- * Description:
- * 功能:XXX
- * Date:2022
- * Version:0.1版本
- * Author:Coffee
- * Modify Recoder:
- */
-
- using System;
- using System.Collections.Generic;
- using System.Text;
-
- namespace Test_Reflection
- {
- class PeopleInfo
- {
-
- private string guid=Guid.NewGuid().ToString();
- public string desc= "人员信息";
-
- public string Id { get; set; }
-
- public string Name { get; set; }
-
- public string Sex { get; set; }
-
- public int Age { get; set; }
-
- public string Work { get; set; }
-
-
- public string WorkFlow(string opc)
- {
- //1、规划当天内容
-
- //2、设置当天内容的紧急程度
-
- //3、根据紧急情况进行处理
-
- //4、总结一天内容
-
- return $"工作流处理完成:{opc}";
- }
-
- public static string Test()
- {
- Console.WriteLine("这是一个测试");
- return "这是一个静态的方法执行完成";
- }
-
- public PeopleInfo()
- {
-
- }
-
- public PeopleInfo(string name,int age)
- {
- this.Name = name;
- this.Age = age;
-
- }
-
-
- }//Class_end
-
- }
- System.Type type = typeof(PeopleInfo);
-
-
- string str = string.Empty;
- str += $"1-对象类型名称:{type.Name + enterEffect}";
- str += $"2-对象类型的全名:{type.FullName + enterEffect}";
- str += $"3-对象类型的命名空间:{type.Namespace + enterEffect}";
- str += $"4-对象类型是否为抽象类型:{type.IsAbstract + enterEffect}";
- str += $"5-对象类型是否为数组:{type.IsArray + enterEffect}";
- str += $"6-对象类型是否为类:{type.IsClass + enterEffect}";
- str += $"7-对象类型是否为枚举:{type.IsEnum + enterEffect}";
- str += $"8-对象类型是否为接口:{type.IsInterface + enterEffect}";
- str += $"9-对象类型是否为公有:{type.IsPublic + enterEffect}";
- str += $"10-对象类型是否为密封类:{type.IsSealed + enterEffect}";
- str += $"11-对象类型是否为值类型:{type.IsValueType + enterEffect}";
- str += $"12-对象类型的基类类型:{type.BaseType + enterEffect}";
- str += $"13-对象类型的【程序集】字符串:{type.Assembly + enterEffect}";
- str += $"14-对象类型是否是COM对象:{type.IsCOMObject + enterEffect}";
- str += $"15-对象类型的【程序集.命名空间.类名】字符串:{type.AssemblyQualifiedName + enterEffect}";
-
- System.Reflection.MemberInfo[] type1 = type.GetMember("PeopleInfo");
- if (type1!=null )
- {
- foreach (var item in type1)
- {
- str += $"成员信息:{item.Name + enterEffect}";
- }
- }
-
-
-
-
- ShowInfo(str);
- PeopleInfo peopleInfo = new PeopleInfo();
- peopleInfo.Id = "CK00988";
- peopleInfo.Name = "张一山";
- peopleInfo.Sex = "男";
- peopleInfo.Age = 23;
- peopleInfo.Work = "信息部总监";
- System.Type type1 = peopleInfo.GetType();
- System.Type type2 = peopleInfo.Age.GetType();
-
- string str = string.Empty;
-
-
- System.Reflection.MemberInfo[] type3 = type1.GetMember("Name");
- if (type3 != null)
- {
- foreach (var item in type3)
- {
- str += $"成员名称:{item.Name} 类型:{item.MemberType} 声明此成员的类为:{item.DeclaringType} {enterEffect}";
- }
- }
-
- System.Reflection.MemberInfo[] type4 = type1.GetMembers();
- if (type4 != null)
- {
- foreach (var item in type4)
- {
- str += $"成员名称:{item.Name} 类型:{item.MemberType} 声明此成员的类为:{item.DeclaringType} {enterEffect}";
- }
- }
-
-
-
- System.Reflection.ConstructorInfo[] ci = type1.GetConstructors();
- if (ci != null)
- {
- foreach (var item in ci)
- {
- str += $"构造成员名称:{item.Name} 类型:{item.MemberType} 声明此成员的类为:{item.DeclaringType} 模块:{item.Module} {enterEffect}";
- System.Reflection.ParameterInfo[] pi111 = item.GetParameters();
- if (pi111 != null)
- {
-
- for (int i = 0; i < pi111.Length; i++)
- {
- str += $"参数{i}是:{pi111[i]} {enterEffect}";
- }
- }
-
- }
-
- str += enterEffect;
- }
-
- System.Type type = System.Type.GetType("Test_Reflection.PeopleInfo");
-
- //通过无参构造创建实例
- object obj = Activator.CreateInstance(type);
- //将对象转为PeopleInfo类
- PeopleInfo peopleInfo1 = obj as PeopleInfo;
-
- str += $"描述1:{peopleInfo1.desc} 名称1:{peopleInfo1.Name} 年龄1:{peopleInfo1.Age}{enterEffect}";
-
- System.Type type111 = typeof(PeopleInfo);
- //通过有参构造创建实例
- dynamic obj2 = Activator.CreateInstance(type111, System.Reflection.BindingFlags.Instance|
- System.Reflection.BindingFlags.Public,null,new object[] {"卓一航",26},null);
-
- str += $"描述2:{obj2.desc} 名称2:{obj2.Name} 年龄2:{obj2.Age}{enterEffect}";
-
-
- System.Reflection.EventInfo[] eventInfo = type1.GetEvents();
- if (eventInfo!=null)
- {
-
- foreach (var item in eventInfo)
- {
- str += $"事件名称:{item.Name} 类型:{item.EventHandlerType} 声明此成员的类为:{item.DeclaringType} 模块:{item.Module} {enterEffect}";
- }
- }
-
- System.Reflection.FieldInfo fi2 = type1.GetField("desc",System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.Public);
- str += $"修改前字段的值:{fi2.GetValue(peopleInfo)} {enterEffect}";
- fi2.SetValue(peopleInfo,"修改后的值");
- str += $"修改后字段的值:{fi2.GetValue(peopleInfo)} {enterEffect}";
-
- System.Reflection.FieldInfo[] fi = type1.GetFields(System.Reflection.BindingFlags.Instance |
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);
- if (fi != null)
- {
-
- foreach (var item in fi)
- {
-
- str += $"字段名称:{item.Name} 类型:{item.FieldType} 声明此成员的类为:{item.DeclaringType} 模块:{item.Module} 值:{item.GetValue(peopleInfo)} {enterEffect}";
-
- }
- }
-
- System.Reflection.PropertyInfo[] pi = type1.GetProperties();
- if (pi != null)
- {
-
- foreach (var item in pi)
- {
- str += $"属性名称:{item.Name} 类型:{item.MemberType} 声明此成员的类为:{item.DeclaringType} 模块:{item.Module} {enterEffect}";
- }
- }
-
- System.Reflection.MethodInfo[] mi = type1.GetMethods(System.Reflection.BindingFlags.Instance| System.Reflection.BindingFlags.NonPublic
- );
- if (mi != null)
- {
- foreach (var item in mi)
- {
- str += $"方法名称:{item.Name} 类型:{item.MemberType} 声明此成员的类为:{item.DeclaringType} 模块:{item.Module} {enterEffect}";
- }
- }
-
- //反射调用方法一
- string result = (string)type.InvokeMember("WorkFlow", System.Reflection.BindingFlags.InvokeMethod |
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance,
- null, obj, new object[] { "测试传入的参数11111" });
- str += $"反射调用方法一:{result} {enterEffect}";
-
- //反射调用方法二
- System.Reflection.MethodInfo mi222 =type.GetMethod("WorkFlow",
- System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance
- | BindingFlags.IgnoreCase);
-
- string result2 = (string)mi222.Invoke(obj,new object[] {"测试传入的参数22222" });
-
- str += $"反射调用方法二:{result2} {enterEffect}";
-
- //反射调用方法三
- System.Reflection.MethodInfo mi333 = type.GetMethod("Test");
- string result3 = (string)mi333.Invoke(null,null);
-
- str += $"反射调用静态方法:{result3} {enterEffect}";
-
- ShowInfo(str);
- System.Type type = System.Type.GetType("Test_Reflection.PeopleInfo");
-
- ShowInfo(type);
- var a = new PeopleInfo("wocao", 45);
-
- var props = a.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
- foreach (var prop in props)
- {
- object value = prop.GetValue(a);
- var ddsaf = prop.Name;
- }
链接:示例项目
提取码:5zzk