反射提供描述程序集、模块和类型的对象(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
msdn-反射官方文档
本文发布于:2024-02-01 18:36:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170678376538644.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |