网站开发与网站设计区别建设体育课程基地网站

张小明 2026/1/9 1:10:59
网站开发与网站设计区别,建设体育课程基地网站,用dw做网站怎么添加水平线,长春小学网站建设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进行投诉反馈,一经查实,立即删除!

网站建设于朦胧域名更新自动转跳

第一章:量子计算任务调度的挑战与机遇随着量子计算从理论研究逐步迈向实际应用,如何高效调度量子任务成为制约系统性能的关键瓶颈。传统经典计算中的任务调度策略难以直接迁移至量子环境,主要受限于量子比特的脆弱性、门操作的时序依赖以及硬…

张小明 2026/1/8 8:08:53 网站建设

高端网站设计教程店标logo设计

FileBrowser终极指南:5步打造高效文件管理系统 【免费下载链接】filebrowser 📂 Web File Browser 项目地址: https://gitcode.com/gh_mirrors/fi/filebrowser 你是否正在为团队文件管理混乱而头疼?想要一个既安全又灵活的文件共享解决…

张小明 2026/1/7 22:17:27 网站建设

如何美化网站首页网站开发页面设计报价

在数据库的世界里,索引就像是一本书的目录,它能帮助我们快速定位到所需的数据,大大提高数据库的查询效率。在这一小节中,我们将深入探讨数据库索引的原理、不同类型索引的特点,并且通过具体的 SQL 代码示例&#xff0c…

张小明 2026/1/8 1:51:52 网站建设

百度 搜索到手机网站汕头网站制作专业

如何用Mole快速清理Mac存储空间:终极指南 【免费下载链接】Mole 🐹 Dig deep like a mole to clean you Mac. 像鼹鼠一样深入挖掘来清理你的 Mac 项目地址: https://gitcode.com/GitHub_Trending/mole15/Mole 你是否经常为Mac电脑存储空间不足而烦…

张小明 2026/1/9 0:07:18 网站建设

临平做网站电话建筑防护网安全网

当前,20万级新能源SUV赛道早已成为兵家必争之地。理想L6以“移动的家”理念俘获都市家庭,问界M7凭借华为生态打造“智能终端”,唐LDM则以运动基因吸引年轻用户。面对如此多元的选择,消费者往往陷入“参数焦虑”:谁的空…

张小明 2026/1/8 2:54:28 网站建设

如何注册网站卖东西免费小程序开发报价

SKT发布A.X 3.1:韩语能力领先的高效多语言大模型 【免费下载链接】A.X-3.1 项目地址: https://ai.gitcode.com/hf_mirrors/skt/A.X-3.1 导语:韩国电信巨头SKT推出最新大语言模型A.X 3.1,凭借在韩语理解与文化语境处理上的突破性表现&…

张小明 2026/1/8 7:02:17 网站建设