当前位置: 首页 > wzjs >正文

技能训练企业网站建设可行性分析seo排名点击软件推荐

技能训练企业网站建设可行性分析,seo排名点击软件推荐,把名字设计成logo,桂林网站建设培训反射(Reflection) 反射是C#中强大的机制,允许程序在运行时动态获取类型信息、操作对象或调用方法,而无需在编译时明确直到类型的定义。 动态类型操作 通过Type类获取类型信息(如typeof()或obj.GetType()),检查继承关系…

反射(Reflection)

反射是C#中强大的机制,允许程序在运行时动态获取类型信息、操作对象或调用方法,而无需在编译时明确直到类型的定义。

  1. 动态类型操作

    • 通过Type类获取类型信息(如typeof()obj.GetType()),检查继承关系(IsSubclassOf)、接口实现(IsAssignableFrom)等。

    • 动态创建实例:Activator.CreateInstance支持通过构造函数参数甚至私有构造方法实例化对象。

    • 调用方法和属性:通过MethodInfo.Invoke执行方法,PropertyInfo.SetValue设置属性值。

    • 处理泛型:例如通过MakeGenericType创建泛型类实例,MakeGenericMethod调用泛型方法。

  2. 程序集操作

    • 加载外部程序集:Assembly.LoadFromAssembly.LoadFile动态加载DLL。

    • 遍历程序集的类型和成员:例如获取所有公共方法或私有字段。

  3. 性能与限制

    • 反射虽灵活,但存在性能开销(因动态解析类型)和安全性风险(如访问私有成员破坏封装)。

    • 适用场景:序列化、依赖注入、测试框架等需要动态行为的场景

使用方法
  • 获取类型信息

    通过Type类获取对象的类型元数据

Type type = typeof(int);         // 通过类型名
Type type2 = myObj.GetType();   // 通过对象实例
  • 动态创建对象

       使用Activator.CreateInstance创建实例

Type type = typeof(MyClass);
object instance = Activator.CreateInstance(type);
  • 访问成员

        获取属性、方法、字段信息

PropertyInfo[] props = type.GetProperties();
MethodInfo method = type.GetMethod("MyMethod");
  •  动态调用方法

         通过反射调用方法

MethodInfo method = type.GetMethod("Add");
int result = (int)method.Invoke(instance, new object[] { 2, 3 });
汇总使用场景
  • 插件系统:动态加载程序集(DLL)并调用其功能。

  • 序列化/反序列化:通过反射便利对象的属性生成JSON/XML。

  • ORM框架:将数据库记录映射到对象属性。

  • 单元测试框架:自动发现并执行测试方法。

注意要点

反射操作通常比静态代码慢,需要慎重使用。

  • 缓存TypeMethodInfo对象。

  • 使用dynamic关键字(动态类型)。

  • 改用表达树(Expression Trees)或源代码生成器(Souree Generators)。

反射官方文档

属性和反射 - C# | Microsoft Learn

特性(Attributes)

特性是为代码元素(类、方法、属性等)添加元数据的标记,这些元数据可通过反射在运行时读取,用于控制程序行为或提供额外信息。

内置常用类型
  • [AttributeUsage]  约束自定义特性的应用目标(如类、方法)和是否允许多次应用。 

  • [Obsolete]  标记方法或类已过时。
     

    [Obsolete("Use NewMethod instead", error: true)]
    public void OldMethod() { }
  • [Serializable]  标记类可序列化。 

  • [DllImport] 用于调用非托管代码。

  •  [Conditional] 条件编译(如调试代码):
    [Conditional("DEBUG")]
    public void Log(string message) { }
自定义特性
  • 自定特性类
    继承Attribute类并添加元数据
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
    public class AuthorAttribute : Attribute
    {public string Name { get; }public AuthorAttribute(string name) => Name = name;
    }
  • 应用特性
    将特性标记到目标代码元素

    [Author("John")]
    [Author("Jane", Version = 2.0)] // 允许通过属性传递参数
    public class MyClass { }
  • 通过反射读取特性
    在运行时获取特性信息
    Type type = typeof(MyClass);
    var attributes = type.GetCustomAttributes(typeof(AuthorAttribute), false);
    foreach (AuthorAttribute attr in attributes)
    {Console.WriteLine($"作者: {attr.Name}");
    }
汇总使用场景
  • 验证逻辑:通过特性标记必填字段(类似[Required])。

  • Web路由:ASP.NET Core中[HttpGet][Route]等特性定义API端点。

  • 权限控制:自定义[Authorize]特性限制访问权限。

  • 文档生成:为Swagger等工具提供API描述信息([ApiExplorer])。

特性官方文档

属性和反射 - C# | Microsoft Learn

反射与特性的协同

两者结合可实现高度动态化的编程模式:

  1. 元数据驱动设计

    • 特性提供结构化元数据(如[Required]验证标记),反射在运行时读取并执行逻辑(如自动验证字段)。

    • 示例:ASP.NET MVC通过[HttpGet]等特性标记控制器方法,反射解析路由并调用对应方法。

  2. 动态代码生成与扩展

    • 反射可动态生成类型(如Emit技术),特性则为生成的代码添加配置信息。

    • 序列化库(如JSON.NET )利用特性控制序列化行为(如[JsonPropertyName]),反射遍历属性进行转换。

反射和特性优缺特点

技术优点缺点
反射动态性高、支持通用代码(如插件系统)性能低、破坏封装、代码可读性差
特性声明式编程、简化配置、增强元数据过度使用导致维护困难、兼容性依赖运行时版本

反射和特性使用方面

  • 自动注册服务:通过扫描程序集中标记了`[Service]`特性的类,实现依赖注入。
  • AOP(面向切面编程):通过特性标记需要拦截的方法,利用反射动态生成代理。
    // 自定义特性标记Excel列索引
    [AttributeUsage(AttributeTargets.Property)]
    public class ExcelColumnAttribute : Attribute {public int Index { get; }public ExcelColumnAttribute(int index) => Index = index;
    }public class Product {[ExcelColumn(0)] public string Name { get; set; }[ExcelColumn(1)] public decimal Price { get; set; }
    }// 反射读取特性并映射Excel数据
    public static List<Product> ParseExcel(string filePath) {var products = new List<Product>();var type = typeof(Product);foreach (var prop in type.GetProperties()) {var attr = prop.GetCustomAttribute<ExcelColumnAttribute>();if (attr != null) {// 根据attr.Index读取Excel列并赋值}}return products;
    }
    

反射和特性注意事项

  • 安全性:反射可能绕过访问修饰符(如访问私有成员),需谨慎使用。

  • 维护性:过度依赖反射会降低代码可读性,尽量通过接口或泛型替代。

  • 性能敏感场景:避免在频繁执行的代码路径中使用反射。

    http://www.dtcms.com/wzjs/128958.html

    相关文章:

  1. 做印刷的有什么网站重庆网站搭建
  2. 团队云智能网站建设谷歌seo技巧
  3. 做网站公司官网百度竞价包年推广公司
  4. 邯郸中材建设有限责任公司网站武汉楼市最新消息
  5. 网页制作流程视频南宁seo结算
  6. 网站建设方面的论文石家庄网站建设方案优化
  7. 湛江人才网郑州seo优化外包顾问
  8. 建设网站有什么要素构成seo是什么意思 seo是什么职位
  9. 网站建设总结与网络营销公司招聘
  10. 建站哪个网站比较好免费网络营销推广软件
  11. 新建的网站怎么做seo优化seo外链发布平台
  12. 长沙做网站建设公司哪家好西安做网站的网络公司
  13. 开装潢公司做网站网站seo应用
  14. ps做网站首页设计教程seo搜狗排名点击
  15. 渭南汽车网站制作网络seo推广
  16. php做网站实例大连seo外包平台
  17. 石家庄网站建设报价百度客服电话24小时
  18. 消防证怎么考取需要什么条件邯郸seo
  19. 旅游类网站模板网络广告策划方案
  20. 宝鸡市交通运输局公路建设网站代写文章哪里找写手
  21. wordpress标签页面厦门seo怎么做
  22. 外贸网站建设有哪些要求网店如何营销推广
  23. WordPress 文章最多字潍坊seo培训
  24. 网站开发与建设课程设计阿里关键词排名查询
  25. 昆明本地网站深圳优化公司样高粱seo
  26. 陕西网站建设的内容莆田seo
  27. php网站怎么做301跳转关键词搜索排名查询
  28. 有没有做奥数题的网站seo优化工作有哪些
  29. 网站建设添加视频百度一下搜索网页
  30. 想自己建个网站怎么样才能引流客人进店