博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#中的反射 Reflection
阅读量:7172 次
发布时间:2019-06-29

本文共 1224 字,大约阅读时间需要 4 分钟。

起初是因为这个4.0才新增的新的引用类型,我当时很惊讶为什么string和int他都能装,然后我就发在了群里,以为大佬告诉我他的内部实现是通过反射来实现的,于是我就去看反射了,看了网上的好多篇文章大篇幅的讲了很多,可是我就看懂了几个描述的场景。

1、B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况。这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音”反射,然后把“回音”进行处理就可以显示出内脏的情况了(我不是医生也不是声学专家,不知说得是否准确^_^)。

2、地球内部结构:地球的内部结构大体可以分为三层:地壳、地幔和地核。地壳是固体,地核是液体,地幔则是半液半固的结构(中学地理的内容,大家还记得吧?)。如何在地球表面不用深入地球内部就知道其内部的构造呢?对,向地球发射“地震波”,“地震波”分两种一种是“横波”,另一种是“纵波”。“横波”只能穿透固体,而“纵波”既可穿透固体又可以穿透液体。通过在地面对纵波和横波的反回情况,我们就可以大体断定地球内部的构造了。

然后还是不知道具体能干嘛,东找西找终于找到

很多软件开发者喜欢在自己的软件中留下一些接口,其他人可以编写一些插件来扩充软件的功能,比如我有一个媒体播放器,我希望以后可以很方便的扩展识别的格式这个接口中包含一个Extension属性,这个属性返回支持的扩展名,另一个方法返回一个解码器的对象(这里我假设了一个Decoder的类,这个类提供把文件流解码的功能,扩展插件可以派生之),通过解码器对象我就可以解释文件流。

那么我规定所有的解码插件都必须派生一个解码器,并且实现这个接口,在GetDecoder方法中返回解码器对象,并且将其类型的名称配置到我的配置文件里面。
这样的话,我就不需要在开发播放器的时侯知道将来扩展的格式的类型,只需要从配置文件中获取现在所有解码器的类型名称,而动态的创建媒体格式的对象,将其转换为IMediaFormat接口来使用。

 

看到这个之后我就想到了继承,继承理解起来比接口好那么一点于是就出现了下面

获取子类的这个过程就叫反射,然后我就去问大佬了,大佬说基本上是对的,但是不透彻,就给我说了几个实际中用到的例子:

1、反射的作用,是可以在运行时获取到对象结构,以及使用其方法属性等成员。

2、 IIS上搭载一个web程序,再新建一个web程序后,iis能调用你放上去的dll文件

这儿基本只能使用反射来实现,iis不可能一开始就能引用你的dll,调用你的dll。

 3、比如很多插件式的编程,插件都是动态加载的,不是事先就定好的,也只能使用反射
 
我也只能理解这么多了,我还是想多理解点的可以不好继续追问大佬,希望看到此贴的大佬们可以教教我,谢谢

 

转载于:https://www.cnblogs.com/Iconnector/p/9269068.html

你可能感兴趣的文章
Android 自定义RadioButton的样式
查看>>
乱七八糟的小问题
查看>>
二叉树后序遍历<非递归>
查看>>
Morris图表如何重新加载数据(重绘)
查看>>
数据库事务隔离级ORACLE数据库事务隔离级别介绍
查看>>
MySQL8.0 关闭二进制日志
查看>>
[K/3Cloud]在插件中根据条件取消表单打开过程
查看>>
Sublime Text3
查看>>
周总结
查看>>
thinkphp中的事务操作
查看>>
Java Web整合开发(7) -- Listener
查看>>
OCP读书笔记(18) - 空间管理
查看>>
利用作业定时收缩SQL SERVER数据库
查看>>
Linux学习笔记06—系统用户及用户组的管理
查看>>
js判断浏览器语言实现网站国际化
查看>>
步步为营 .NET 代码重构学习笔记 三、内联方法(Inline Method)
查看>>
步步为营 SharePoint 开发学习笔记系列 四、创建sub site和创建list
查看>>
request.getSession()几种获取情况之间的差异
查看>>
js 各种事件 如:点击事件、失去焦点、键盘事件等
查看>>
Linux篇---Vi的使用
查看>>