首页 > 编程语言 >C#反射(Reflection)

C#反射(Reflection)

时间:2024-09-07 14:53:51浏览次数:3  
标签:反射 Reflection C# attribute 程序 实例 类型

反射指程序可以访问,检测和修改它本身状态或行为的一种能力.

程序集包含模块,而模块包含类型,类型又包含成员.反射则提供了封装程序集,模块和类型的对象.

可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型,然后,可以调用类型的方法或访问其字段和属性.

优缺点:

优点:

  • 1、反射提高了程序的灵活性和扩展性。
  • 2、降低耦合性,提高自适应能力。
  • 3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点:

  • 1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
  • 2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

反射(Reflection)的用途

反射(Reflection)有下列用途:

  • 它允许在运行时查看特性(attribute)信息。
  • 它允许审查集合中的各种类型,以及实例化这些类型。
  • 它允许延迟绑定的方法和属性(property)。
  • 它允许在运行时创建新类型,然后使用这些类型执行一些任务。

查看元数据

我们已经在上面的章节中提到过,使用反射(Reflection)可以查看特性(attribute)信息。

System.Reflection 类的 MemberInfo 对象需要被初始化,用于发现与类相关的特性(attribute)。为了做到这点.

实例代码如下:

实例二:

 

标签:反射,Reflection,C#,attribute,程序,实例,类型
From: https://blog.csdn.net/nazabanne/article/details/141818287

相关文章

  • AWTK fscript 中的位操作扩展函数
    fscript是AWTK内置的脚本引擎,开发者可以在UIXML文件中直接嵌入fscript脚本,提高开发效率。本文介绍一下fscript中的位操作扩展函数位操作扩展函数1.&位与运算。原型n1&n2示例print(1&1)2.|位或运算。原型n1|n2示例print(|(1,2))3.~按位取反运算。原型~(n1)示例p......
  • To enable inbound and outbound TCP traffic specifically for port 18917 using `uf
    ToenableinboundandoutboundTCPtrafficspecificallyforport18917usingufwonDebian12,followthesesteps:AllowinboundTCPtrafficonport18917:sudoufwallow18917/tcpAllowoutboundTCPtrafficonport18917(ifyouhaverestrictedoutgoingtra......
  • Adding /usr/local/lib to the dynamic (shared) link library path list on a Debian
    Toaddthepath/usr/local/libtothedynamic(shared)linklibrarypathlistonaDebian12x64system,youcandoiteithertemporarilyforthecurrentsessionorpermanentlyforallsessions.Herearethestepsforbothmethods:TemporaryMethod(forth......
  • Monetization of Copywriting
    Copywritingisthepracticeofwritingpersuasivecontentwiththegoalofconvincinganaudiencetotakeaparticularaction.Thiscaninvolvecraftingads,productdescriptions,websitecontent,emailcampaigns,socialmediaposts,andmore.Theprimary......
  • 0llama AI Chatbot
    llama$wgethttps://ollama.com/install.sh-Oollama_ai_install.sh--2024-09-0111:15:20-- https://ollama.com/install.shResolvingollama.com(ollama.com)...34.120.132.20Connectingtoollama.com(ollama.com)|34.120.132.20|:443...connected.HTTPrequest......
  • restful @RequestParam 可选,服务中的mock方法使用
    @RequestParam是一个SpringMVC注解,用于将请求参数绑定到你的方法参数上。当你标记一个参数为可选的时候,你可以不提供这个参数,在这种情况下,Spring将会使用这个参数的默认值,或者如果你没有设置默认值,它会使用参数的类型的默认值(例如,对于一个int类型的参数,默认值为0)。要将@......
  • cookie和session的区别
        什么是cookie?        cookie字面翻译就是饼干的意思;但是在web中可不是饼干的意思,通常一点理解就相当是登录视频网站啊,csdn网站的账户和密码,客户端发送账号密码还有GET请求的资源给服务端,服务端通过后台的数据库进行比对,发现密码账号对的上之后将......
  • INSERT ... ON DUPLICATE KEY UPDATE 问题记录
    起因:需要新增复制数据并更新原数据状态,故采用INSERT...ONDUPLICATEKEYUPDATE的方式来插入和更新数据问题:数据插入及更新异常环境:MySQL5.7.32数据表结构:点击查看代码CREATETABLE`example_table`(`col_a`varchar(255)NOTNULL,`col_b`varchar(255)NOTN......
  • Pytorch相关(第五篇)
    如何理解Pytorch中的forward和backward?在PyTorch中,forward 和 backward 是实现深度学习模型的两个核心方法,它们负责计算模型的前向传播和反向传播。理解这两个方法对于使用PyTorch进行深度学习至关重要。下面我将详细解释它们的作用和实现方式。forward 方法作用:forwar......
  • Qt C++编程 从入门到实践 彭源 清华大学出版社
    第一章程序设计基础1.2.1输入和输出操作iostream叫做标准输入输出流库头文件namespacestd叫做标准命名空间cout、cin叫做标准输出、输入流对象有时候看见std::cout的代码,是因为没有事先声明cout对象是从标准命名空间调用的,::叫做域解析运算符,作用就是指明cout这个对象是......