网站后台数据库下载青海网站开发 建设

张小明 2026/1/7 11:56:49
网站后台数据库下载,青海网站开发 建设,上海网页设计班,自己做网站费用C# 中的反射#xff08;Reflection#xff09; 是 .NET 提供的一种强大机制#xff0c;允许程序在运行时检查、分析和操作类型#xff08;类、结构、接口、方法、属性等#xff09;的元数据#xff0c;并动态创建对象、调用方法、访问字段或属性。它主要通过 System.Refl…C# 中的反射Reflection是 .NET 提供的一种强大机制允许程序在运行时检查、分析和操作类型类、结构、接口、方法、属性等的元数据并动态创建对象、调用方法、访问字段或属性。它主要通过System.Reflection命名空间中的类实现。一、反射的核心用途动态加载程序集Assembly获取类型信息Type创建对象实例Activator / ConstructorInfo调用方法MethodInfo.Invoke读写属性或字段PropertyInfo / FieldInfo检查特性Attribute实现插件系统、ORM、序列化框架等二、基础使用步骤1. 获取 Type 对象// 方法1通过 typeofTypetype1typeof(string);// 方法2通过对象的 GetType()stringstrhello;Typetype2str.GetType();// 方法3通过类型全名从 Assembly 加载Typetype3Type.GetType(System.String);// 方法4从程序集加载AssemblyassemblyAssembly.LoadFrom(MyLibrary.dll);Typetype4assembly.GetType(MyNamespace.MyClass);注意Type.GetType(...)只能加载当前应用域中已加载或 mscorlib/System 中的类型跨程序集需指定完整名称含 Assembly 信息。2. 创建对象实例使用Activator.CreateInstanceTypetypetypeof(Person);objectobjActivator.CreateInstance(type);// 调用无参构造函数// 带参数构造objectobj2Activator.CreateInstance(type,Alice,30);使用ConstructorInfoConstructorInfoctortype.GetConstructor(newType[]{typeof(string),typeof(int)});objectinstancector.Invoke(newobject[]{Bob,25});3. 调用方法Typetypetypeof(Calculator);objectcalcActivator.CreateInstance(type);// 获取方法MethodInfomethodtype.GetMethod(Add);// 调用实例方法intresult(int)method.Invoke(calc,newobject[]{10,20});// 调用静态方法MethodInfostaticMethodtype.GetMethod(Multiply);intstaticResult(int)staticMethod.Invoke(null,newobject[]{5,6});如果方法是泛型需先调用MakeGenericMethod()。4. 访问属性PropertyTypetypetypeof(Person);objectpersonActivator.CreateInstance(type);// 设置属性PropertyInfonameProptype.GetProperty(Name);nameProp.SetValue(person,Charlie);// 获取属性值stringname(string)nameProp.GetValue(person);5. 访问字段FieldFieldInfofieldtype.GetField(_age,BindingFlags.NonPublic|BindingFlags.Instance);field.SetValue(person,28);intage(int)field.GetValue(person);注意私有成员需要BindingFlags.NonPublic。6. 获取所有成员Typetypetypeof(MyClass);// 所有公共方法MethodInfo[]methodstype.GetMethods();// 所有公共属性PropertyInfo[]propstype.GetProperties();// 所有字段包括私有FieldInfo[]fieldstype.GetFields(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance);// 所有构造函数ConstructorInfo[]ctorstype.GetConstructors();7. 检查和读取特性Attribute[DisplayName(用户实体)]publicclassUser{}// 检查是否有某个 AttributeboolhasAttrtype.IsDefined(typeof(DisplayNameAttribute),false);// 获取 Attribute 实例varattr(DisplayNameAttribute)type.GetCustomAttribute(typeof(DisplayNameAttribute));Console.WriteLine(attr.DisplayName);// 输出用户实体三、常用 BindingFlags 枚举值标志说明Public公共成员默认NonPublic私有/受保护成员Instance实例成员Static静态成员DeclaredOnly仅当前类型声明的成员不包括继承示例type.GetMethod(PrivateMethod,BindingFlags.NonPublic|BindingFlags.Instance);四、性能注意事项反射比直接调用慢很多可能慢 10~100 倍因为涉及类型查找、安全检查、装箱/拆箱等。避免在高频循环中使用反射。可缓存 MethodInfo / PropertyInfo 等以提升性能。考虑使用委托如Delegate.CreateDelegate或表达式树Expression优化。.NET Core / .NET 5 引入了System.Reflection.Emit和source generator等更高效替代方案。五、实际应用场景举例1. 通用对象拷贝器publicstaticvoidCopyProperties(objectsource,objecttarget){varsourceTypesource.GetType();vartargetTypetarget.GetType();foreach(varpropinsourceType.GetProperties()){vartargetProptargetType.GetProperty(prop.Name);if(targetProp!nulltargetProp.CanWrite){targetProp.SetValue(target,prop.GetValue(source));}}}2. 插件系统AssemblypluginAssembly.LoadFrom(Plugin.dll);TypepluginTypeplugin.GetTypes().FirstOrDefault(ttypeof(IPlugin).IsAssignableFrom(t));IPlugininstance(IPlugin)Activator.CreateInstance(pluginType);instance.Execute();3. ORM 映射如将 DataTable 转为对象publicstaticTToObjectT(DataRowrow)whereT:new(){TobjnewT();Typetypetypeof(T);foreach(DataColumncolinrow.Table.Columns){PropertyInfoproptype.GetProperty(col.ColumnName);if(prop!nullrow[col]!DBNull.Value)prop.SetValue(obj,row[col]);}returnobj;}六、总结优点缺点高度灵活支持运行时动态行为性能开销大实现通用框架如 DI、AOP、序列化代码可读性降低支持插件、脚本扩展容易引发运行时异常如拼写错误可用于调试、测试工具不支持 AOT 编译如 Native AOT的部分场景✅建议仅在必要时使用反射并做好异常处理如NullReferenceException、TargetException、MissingMethodException等。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

中企动力做的网站后台如何登陆wordpress关闭主题

第一章:Open-AutoGLM插件性能实测:10个真实场景下的效率飞跃数据曝光在多个实际开发与运维场景中,Open-AutoGLM插件展现出显著的自动化推理与任务执行能力。通过对典型工作流的深度集成测试,该插件在自然语言理解、代码生成、日志…

张小明 2026/1/3 8:56:46 网站建设

做网站是否要去工商备案wordpress免插件增强

MoviePilot NAS媒体库自动化管理工具部署指南 【免费下载链接】MoviePilot NAS媒体库自动化管理工具 项目地址: https://gitcode.com/gh_mirrors/mov/MoviePilot 项目概述 MoviePilot是一款专为NAS用户设计的媒体库自动化管理工具,通过智能化的方式帮助用户…

张小明 2026/1/3 1:07:58 网站建设

it培训网站模板网站制作成品免费

ComfyUI版本升级注意事项:兼容性问题与迁移策略 在AIGC工具日益普及的今天,越来越多的设计团队和AI开发者开始将图像生成流程从“尝试性创作”转向“工业化生产”。而在这条通往自动化、可复现内容生产的道路上,ComfyUI 正逐渐成为核心引擎—…

张小明 2026/1/2 10:57:37 网站建设

家具网站模版flash网站设计作品

淘宝直播弹幕抓取工具使用指南 【免费下载链接】taobao-live-crawler A crawler on taobao live barrages. 项目地址: https://gitcode.com/gh_mirrors/ta/taobao-live-crawler 淘宝直播弹幕抓取工具是一个基于Node.js开发的实时弹幕数据采集系统,能够自动获…

张小明 2026/1/3 6:34:05 网站建设

青岛建设银行银行招聘网站网站建设报价书

一、技术概述与核心挑战 单细胞转录组测序技术作为细胞生物学研究的革命性工具,能够在单细胞分辨率下解析基因表达谱,揭示细胞异质性、发育轨迹及微环境互作等复杂生物学过程。与群体细胞测序相比,该技术通过分析单个细胞的转录组信息&#…

张小明 2026/1/2 14:13:39 网站建设

组建网站开发团队公司注册费用与流程

Linux 系统安全防护全解析 1. 为何要关注安全 在当今的网络世界中,Linux 系统的安全问题不容忽视。对于独立系统或孤立局域网中的系统,需要保护系统免受用户的不当操作,防止用户有意或无意地修改、删除系统文件,以及避免用户破坏他人或自己的文件。 而当 Linux 系统连接…

张小明 2026/1/3 3:11:06 网站建设