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

张小明 2025/12/30 10:01:27
网站后台数据库下载,青海网站开发 建设,上海网页设计班,自己做网站费用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进行投诉反馈,一经查实,立即删除!

珠海品牌网站制作做网站软件的公司

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

张小明 2025/12/29 23:07:39 网站建设

share poine 户做网站企业网络安全管理

兼容 是对企业历史投资的尊重 是确保业务平稳过渡的基石 然而 这仅仅是故事的起点 在数字化转型的深水区,企业对数据库的需求早已超越“语法兼容”的基础诉求。无论是核心业务系统的稳定运行,还是敏感数据的安全防护,亦或是复杂场景下的性能优…

张小明 2025/12/29 22:40:56 网站建设

做购物网站费用模板网站系统

涛思库异常:DB error: some vnode/qnode/mnode(s) out of service (10.703928s)妈的,劳资要崩溃了,就这个逼错误,目前我唯一找到的解决办法是重装数据库,什么删库改配置,改各种东西都没什么屌用&#xff0c…

张小明 2025/12/29 22:41:50 网站建设

能免费建网站吗wordpress 到访人数

Windows PowerShell 文本处理与 COM 自动化技巧 1. 字符串处理方法 在 Windows PowerShell 中,有多种处理字符串的方法。 1.1 大小写转换方法 ToLowerInvariant() 方法:功能和 ToLower() 类似,但使用固定区域性的大小写规则。 ToUpper() 方法:将字符串中的所有字符…

张小明 2025/12/29 22:41:51 网站建设

五华建设银行网站wordpress 环境搭建

Pose-Search:人体动作分析与姿态搜索完整解决方案 【免费下载链接】pose-search x6ud.github.io/pose-search 项目地址: https://gitcode.com/gh_mirrors/po/pose-search 在人工智能技术飞速发展的今天,实时姿态检测和动作搜索已成为计算机视觉领…

张小明 2025/12/30 4:51:37 网站建设

上传图片的网站要怎么做北京网站优化方法

第一章:空间转录组的 R 语言细胞聚类算法空间转录组技术能够同时捕获组织切片中基因表达的空间位置信息,为解析组织微环境提供了高分辨率数据支持。在众多分析任务中,细胞聚类是识别潜在功能区域与细胞类型的關鍵步骤。R 语言凭借其强大的统计…

张小明 2025/12/30 4:36:33 网站建设