问题描述
DLL内容都了解的话,直接引用DLL不就好了吗,为什么还要反射。DLL里面的内容什么都不知道的话,就算反射的话,也不知道里面的方法是干什么的啊,和直接引用DLL没区别啊。有的说工厂模式动态加载DLL时需要用到反射如果我不用工厂模式,也不动态加载是不是就不需要使用了那。
解决方案
解决方案二:
楼主你试试做个支持插件的应用程序
解决方案三:
动态加载dll调用方法
解决方案四:
引用楼主guanzijuan123的回复:
DLL内容都了解的话,直接引用DLL不就好了吗,为什么还要反射。DLL里面的内容什么都不知道的话,就算反射的话,也不知道里面的方法是干什么的啊,和直接引用DLL没区别啊。有的说工厂模式动态加载DLL时需要用到反射如果我不用工厂模式,也不动态加载是不是就不需要使用了那。
如果你不用编程,连编程语言都不用学了。。
解决方案五:
反射就是运行时检查和处理程序元素的功能枚举类型的成员;实例化新对象;执行对象的成员;查找类型的信息;查找程序集的信息;检查应用于类型的定制特性;创建和编译新程序集.
解决方案六:
反射(.NET元数据访问)是一种抽象模式,可以提高开发效率,比如对象序列化。。。
解决方案七:
需要获取类成员信息的时候吧
解决方案八:
楼主会用反射吗,最简单的用法是:可以找出对象所包含成员变量,属性,方法等,然后进行赋值,调用等。但这些成员变量,属性,方法的名称在编程的时候都是不知道的。
解决方案九:
引用楼主guanzijuan123的回复:
DLL内容都了解的话,直接引用DLL不就好了吗,为什么还要反射。DLL里面的内容什么都不知道的话,就算反射的话,也不知道里面的方法是干什么的啊,和直接引用DLL没区别啊。有的说工厂模式动态加载DLL时需要用到反射如果我不用工厂模式,也不动态加载是不是就不需要使用了那。
你说的很对,直接引用可以办到,就不需要反射。问题是,VisualStudio的开发环境为了列举你编写的用户控件的成员,能够直接引用你的dll么?IIS为了将发来的http请求转化为对你写的asp.net程序的调用,可以引用你的程序么?
解决方案十:
引用楼主guanzijuan123的回复:
DLL内容都了解的话,直接引用DLL不就好了吗,为什么还要反射。DLL里面的内容什么都不知道的话,就算反射的话,也不知道里面的方法是干什么的啊,和直接引用DLL没区别啊。有的说工厂模式动态加载DLL时需要用到反射如果我不用工厂模式,也不动态加载是不是就不需要使用了那。
像你说的,的确是不需要。工厂模式也不一定非得反射。不过反射在某些情况下是很管用的,比如你所说的动态加载,不想写死或不能写死,只好反射。
解决方案十一:
通俗的说,反射可以使用未知的dll。
解决方案十二:
dll应该是可以用的
解决方案十三:
需要动态生成一个实例的时候可以考虑使用反射,很多.NET框架中运用了反射,反射有更多的灵活性
解决方案十四:
一个人认为程序开发过程中的“设计”跟自己无关、都是领导的事情,那么他就一辈子没有这方面需求。反之,如果你把口号付诸于实践,那么你必须在一万行代码中总有那么十几行代码明确地使用到反射的。
解决方案十五:
亲.普通的代码.不是dll也可以用反射的.就像是静态调用和动态调用的关系.(类.属性,方法等)名字都可以不是固定的.很方便历遍.
解决方案:
该回复于2013-09-07 00:05:03被版主删除
解决方案:
引用13楼sp1234的回复:
一个人认为程序开发过程中的“设计”跟自己无关、都是领导的事情,那么他就一辈子没有这方面需求。反之,如果你把口号付诸于实践,那么你必须在一万行代码中总有那么十几行代码明确地使用到反射的。
我也不懂,求科普啊,大神!为啥要用C#反射?
解决方案:
动态调用dll,比如这个dll有一个类,我们不知道它里面有什么属性、方法、元素?但通过反射就可以知道它里的属性、方法,就可以实现调用。通过反射获取它的类型是什么?
解决方案:
反射可以用来开发程序插件一类的,别人开发的插件只要继承某个已知的接口,就可以利用反射动态加载进来,然后实例化接口调用,就可以载入别人的插件了
解决方案:
该回复于2015-11-30 23:53:49被版主删除
解决方案:
这么说吧平时你写程序的时候基本上很少用到或者可能都用不到反射除非你接触框架这样的东西你要编写或者修改你才会写反射其他时间只要别人告诉你怎么用就行楼上各位大大都说了反射其实很常用序列化或者做可扩展应用程序等等当然如果你负责框架部分的开发会经常遇到反射的
解决方案:
我的理解就是一种抽象手段,比如委托(函数指针),如果你调用的时候已经知道函数是什么了,那不是也不需要了么?但是当你需要一个抽象的通用的方法的时候,就需要了。
解决方案:
反射就是.net里的内工厂,还有其他很多种用法,通过反射可以把一个textbox里的string编译为一个dll,在动态载入调用执行,可以解决一些特殊的业务需求
解决方案:
该回复于2015-11-30 23:57:24被版主删除
解决方案:
只是因为你还没有用到罢了最简单的举例就是插件了比如别人继承我的接口写了一个插件放在我的程序目录下面然后我程序运行遍历目录下的所有dll然后在里面去调用我的接口这难道不需要用到反射?。。。
解决方案:
我只能告诉你,c#的语言设计内置就预留了反射,即便你程序代码里面不使用任何反射相关的代码,运行时一样会有一部分内存自行预保留处理反射相关的功能,这是不可避免的。为什么要用反射,我举这样一个例子你或许会明白。c#这种高级语法是面向对象编程的,假如你把程序某个功能看成一个房子,反射的一种理解是你可以将这个房子拆解成一个个的单体(很多小零件,或许是小零件的组合等),你可以很方便的操控这些单体零件,另外还可以再组装这些零件,当然,这些是在运行时处理的。
解决方案:
反射不仅仅是撸主描述的这一个用处也可以结合泛型,进行实体间动态赋值,你不就省去了很多行低能的代码了么
解决方案:
[ProAtrribute(DisplayName="点名",StoreToDB=true,DisplayOnUI=true,Unique=true,DbType=DbType.String)]publicstringPOINT_NAME{get;set;}//我不知道使用这种玩儿能不能算反射,反正动态生成SQL语句非常有用
解决方案:
需要的时候用如果非要举个例子那么IoC、AOP、Remoting都需要
解决方案:
比如你的程序可以让用户自己开发插件,就可以预留接口,反射加载。还有很多其他功能
解决方案:
IDE的智能感知功能!
解决方案:
效率吧,对元数据访问,可能多做很多事情。
解决方案:
你这人抽象思维不够。给个题目你做吧。设计一段程序,能自动给页面上的表单元素赋值。比如:publicclassTest{publicstringName{get;set;}}如果:已知一个实际对象:Testt=newTest(){Name="xiaoming"};页面上的表单元素为:<asp:TextBoxID="txt_Name"runat="server"></asp:TextBox>唯一的规则是类的属性名称与表单元素的名称(第一个_之后的部分)相同。如果你觉得可以不用反射做,那么:在添加任何多个你开始不知道名称的表单元素的情况下,你还能不能做出来?
解决方案:
说得没错,你不用工厂模式,不动态加载,就不需要用反射,而且反射是会影响执行效率的,虽然.Net框架已经大幅提升了反射时的效率了。用不用反射和实际需求是密切相关的,楼上那些和你鬼扯反射有什么作用,有多么好的,还给你出个毫无实际意义的题目的,都是没搞清楚你想问得是什么的。
解决方案:
引用33楼masanaka的回复:
说得没错,你不用工厂模式,不动态加载,就不需要用反射,而且反射是会影响执行效率的,虽然.Net框架已经大幅提升了反射时的效率了。用不用反射和实际需求是密切相关的,楼上那些和你鬼扯反射有什么作用,有多么好的,还给你出个毫无实际意义的题目的,都是没搞清楚你想问得是什么的。
你明白这个题的用意么?执行效率当然重要,但有时为了开发效率也可以牺牲一下,并是每个地方都需要那么快的执行效率,慢0.01秒并没有什么了不起。不过也别争了吧,楼猪13年的贴,没意思。
解决方案:
我现在已经将软件的功能都封装成了一个一个的动态库,我再想将软件运行的流程用EXCEL写出来,把这些库名称以及参数都写在EXCEL中,但是如何在软件里面进行调用,是否就要用到反射?
解决方案:
就举一个例子吧,如果程序中某个地方需要实例化整个程序中所以继承某接口的类,这个时候难道你要去程序中找到所有符合条件的类再实例化?而反射就可以很好的解决这个问题
解决方案:
方便,你直接引用每个都要引用,新写的还要去重新编译发布等等so你懂得
解决方案:
dll各种版本的变化,你不可能每次都编译成同一个版本,这样管理会混乱。这样子也是一种很好的我解藕方式,你如果dll很庞大,引用进工程是不会很方便的。
解决方案:
解决方案:
看看这个吧
解决方案:
引用16楼dth886的回复:
Quote: 引用13楼sp1234的回复:
一个人认为程序开发过程中的“设计”跟自己无关、都是领导的事情,那么他就一辈子没有这方面需求。反之,如果你把口号付诸于实践,那么你必须在一万行代码中总有那么十几行代码明确地使用到反射的。我也不懂,求科普啊,大神!为啥要用C#反射?
你不是在问题中表明了嘛!人家告诉你“有的说工厂模式动态加载DLL时需要用到反射”,你直接来一句“如果我不用工厂模式......”,这不就是典型的故意抬杠嘛!就像有的家长跟子女说“好好学习,将来有个好前途”,孩子说“如果我不想有个好前途,只想玩儿,那么......”,这不就是抬杠嘛。这时候你还让人再给你“科普”?传统一点的家庭,直接就不给你饭吃。
解决方案:
这里,我认为你的问题不是关于“反射”的技术问题,而是心理上和逻辑上故意的问题。
解决方案:
心理问题造成了不成熟的争议,阻止了真正的技术讨论。工厂模式它本身就是“反射、注入”概念的设计超级,它就是体现了通过配置或者传输而反射出来一些未知类型的对象实例(这些实例实现了统一的业务父类或者父接口)。问题是你的方式——姿势,不像是虚心学习反射应用的哦?!
解决方案:
一般的构架,都有用到反射,便于扩展,dll和类名可以自己传入
解决方案:
楼主问的问题很入门,大神们都理解不了,回答也是太深了.楼主的问题就好比,我要算1+1=2不需要类,甚至不需要写一个函数,直接输出1+1不就完了吗?任何一门技术存在即合理,楼主要是想知道什么时候用什么时候不用只有在你用过若干次之后才能深刻了解这门技术到底有什么用,而且到时候你自然理解了,就好像刚开始学编程的人,问面向对象有什么用,我不用面向对象也可能写出来啊.
解决方案:
引用13楼sp1234的回复:
一个人认为程序开发过程中的“设计”跟自己无关、都是领导的事情,那么他就一辈子没有这方面需求。反之,如果你把口号付诸于实践,那么你必须在一万行代码中总有那么十几行代码明确地使用到反射的。
装B
解决方案:
大家对于24000小时之前的帖子这么热情啊
解决方案:
比如你做一个平台,里面可以挂很多插件!这些插件都是程序执行时动态加载的,这时,就用到了反射。
解决方案:
网友给的一个例子,个人觉得还不错比如有一个猫类:publicclassCat{publicintAge{get;set;}publicstringName{get;set;}//假设它的属性还有很多很多}现在问题是:我NEW一个猫叫"小猫1",我想复制这一个对象,“小猫2”,那该怎么处理呢?像下面这样吗:Catc1=newCat(){Age=20,Name="小猫1"};Catc2=c1;那这样肯定是错的。因为c1和c2都引用的是同一个对象“小猫1”,那我现在想复制一个跟小猫1一模一样的对象怎么处理呢?这里就用到了反射:方法:protectedvoidPage_Load(objectsender,EventArgse){Catc1=newCat(){Age=20,Name="小猫"};Typetype=typeof(Cat);Catc2=newCat();foreach(System.Reflection.PropertyInfoinfointype.GetProperties()){info.SetValue(c2,info.GetValue(c1,null),null);}Label1.Text=c2.Name;Label2.Text=c2.Age.ToString();}
解决方案:
反射的性能很低,其实很多时候就是装B的时候用反射