可用分有7000多了,准备散掉,讨论一些日常开发中经常遇到的,有争议的问题,希望大家踊跃发言,并欢迎各路高手指点迷津!每个问题100分,给发言最精彩的5个人。第二个:反射的应用场合?(ustbwuyi)没怎么用过反射,谁感兴趣就来发言吧...

解决方案 »

  1.   

    工厂模式看看.Net PetShop 4.0中的使用配置文件属性管理  http://blog.csdn.net/fengfangfang/archive/2006/09/07/1189061.aspx 
    缓存处理  http://blog.csdn.net/fengfangfang/archive/2006/09/06/1185077.aspx 
    消息处理  http://blog.csdn.net/fengfangfang/archive/2006/09/08/1194896.aspx  
      

  2.   

    private static IPetShopCacheDependency LoadInstance(string className) {    string path = ConfigurationManager.AppSettings["CacheDependencyAssembly"];
        string fullyQualifiedClass = path + "." + className;    // Using the evidence given in the config file load the appropriate assembly and class
        return (IPetShopCacheDependency)Assembly.Load(path).CreateInstance(fullyQualifiedClass);
    }
      

  3.   

    个人爱好,在csdn上看到自己觉得有收藏价值的,就整理一下放到了自己的blog里,下次查起来方便啊
      

  4.   


     反射应用之一:根据控件名、属性名进行取值和赋值
        '必须引用命名空间System.Reflection,System.ComponentModel    '以下根据控件名和属性名取值    Public Function GetValueControlProperty(ByVal ClassInstance As Object, ByVal ControlName As String, ByVal PropertyName As String) As Object        Dim Result As Object        Dim myType As Type = ClassInstance.GetType        Dim myFieldInfo As FieldInfo = myType.GetField("_" & ControlName, BindingFlags.NonPublic Or _                                     BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.Instance)        If Not myFieldInfo Is Nothing Then            Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(myType)            Dim myProperty As PropertyDescriptor = properties.Find(PropertyName, False)            If Not myProperty Is Nothing Then                Dim ctr As Object                ctr = myFieldInfo.GetValue(ClassInstance)                Try                    Result = myProperty.GetValue(ctr)                Catch ex As Exception                    MsgBox(ex.Message)                End Try            End If        End If        Return Result    End Function    '以下根据控件名和属性名赋值    Public Function SetValueControlProperty(ByVal ClassInstance As Object, ByVal ControlName As String, ByVal PropertyName As String, ByVal Value As Object) As Object        Dim Result As Object        Dim myType As Type = ClassInstance.GetType        Dim myFieldInfo As FieldInfo = myType.GetField("_" & ControlName, BindingFlags.NonPublic _                  Or BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.Instance)  '加"_"这个是特要紧的        If Not myFieldInfo Is Nothing Then            Dim properties As PropertyDescriptorCollection = TypeDescriptor.GetProperties(myType)            Dim myProperty As PropertyDescriptor = properties.Find(PropertyName, False)  '这里设为True就不用区分大小写了            If Not myProperty Is Nothing Then                Dim ctr As Object                ctr = myFieldInfo.GetValue(ClassInstance) '取得控件实例                Try                    myProperty.SetValue(ctr, Value)                    Result = ctr                Catch ex As Exception                    MsgBox(ex.Message)                End Try            End If        End If        Return Result    End Function    '调用    '以下实现Label1.Text=TextBox1.Text,Label2.Text=TextBox2    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim i As Integer        For i = 1 To 2            Me.SetValueControlProperty(Me, "Label" & i.ToString, "Text", GetValueControlProperty(Me, "TextBox" & i.ToString, "Text"))        Next i    End Sub
      

  5.   

    反射可用来执行一系列的功能。大多数的序列化引擎应用反射从需要序列化的对象中提取数据。反射还可以用内置模块来建立可自定义的应用结构。许多对象关系建模(ORM)还利用反射来执行动态映射功能。虽然没有进行广泛宣传,反射的最有趣应用之一在于它能大大减少完成单调开发任务所需的时间。由于反射是完全动态的,它允许你在不必重新生成代码的情况下改变基本的结构,因而反射是一个非常优秀的代码生成替代工具。例如,许多代码生成工具允许你根据基本的数据库建立数据对象。反射可用来从DataTables——它由数据库中返回——这样的数据结构中动态提取商业对象(类)。应用这种方法,就不必应用代码生成器来生成代码。你只要简单地循环遍历DataTables中的竖栏,并将栏名称与商业对象中的属性名称动态匹配。还可用反射将一个对象的属性与一个存储程序参数动态捆绑起来。这个捆绑过程允许你建立普通的数据访问方法,提供代码生成工具为你带来的许多完全动态的优势。因此,反射能够显著减少代码长度,并缓解应用维护压力。
      

  6.   

    kbxj406(羽儿):
    有心人,偶开一帖叫Asp.Net开发小技巧怎么样,到时候你也发几个啊
      

  7.   

    反射也可以看作一种自定义的“语言”扩展机制,它非常简单,总共只有那几个类型和几个方法,比ADO.NET要简单多了。难点在于使用者自身。就像没有任何好的软件工程规则,照样可以拼凑成任何一款程序来,没有设计控制引擎的金刚钻,照样可以打造出一个临时的产品来。现在国内很多做软件都是只顾温饱、交差,如果你的经理只懂销售不懂技术,那么肯定不会想到搞软件开发的人还能“一生只做一件事”。
      

  8.   

    场合一,做一程序名叫Reflector.exe,可以反编译出.net程序源码
      

  9.   

    引用别人的:public static void CreateControl(string controlType, Form form, int positionX, int positionY)
    {
       try
       { 
        string assemblyQualifiedName =  typeof(System.Windows.Forms.Form).AssemblyQualifiedName;
        string assemblyInformation = assemblyQualifiedName.Substring(assemblyQualifiedName.IndexOf(","));
        Type ty = Type.GetType(controlType + assemblyInformation);
        Control newControl = (Control)System.Activator.CreateInstance(ty);
        form.SuspendLayout();
        newControl.Location = new System.Drawing.Point(positionX, positionY);
        newControl.Name = ty.Name + form.Controls.Count.ToString();
        form.Controls.Add(newControl);
        form.ResumeLayout();
       }
       catch(Exception ex)
       {
        throw ex;
       }
      }
      

  10.   


    1、程序中可以不添加对类所处的程序集的引用
    2、可以通过工厂方式创建对象,输入参数为类的名称
    3、类似api的调用,直接从程序集中得到一个函数或方法
    4、通过配置文件控制程序的菜单、工具栏项目等
      

  11.   

    使用反射的地方:
    反射使用的地方不是很多,现在在两个地方用到
    1。工厂模式做的插件系统用,通过配置文件的方式加载DLL,通过反射创建实例。
    2。数据dump,这个是用在日志系统里,当发生错误时,通过反射导出当前数据对象的值。
      

  12.   

    反射,我认为最精典的用法,就是动态加载,以及后期绑定,比如一个dll已经发布了,但是我们可以通过反射加载调用其方法及属性,当然反射的作用不紧紧这些。
      

  13.   

    7000分其实也不多,我从02年就开始混csdn,一直都是看得多,问得少,答得更少^_^
      

  14.   

    程序员的福音---去www.mylinux.com.cn看看吧,程序员的图书馆
    最全面的程序开发资料网www.mylinux.com.cn
    包罗java,linux,数据库,安全等等技术资料,更有众多软件外包项目我们的qq群:15096318 学习程序的都可以来华资软件作为一家专业的软件公司,现公开承接各种软件外包项目.
    www.mylinux.com.cn国内最大的网上软件加工厂,提供最完善的软件外包服务,采用流水型操作流程。中国软件业的发展不缺人才也不缺资金,缺的是人才的组织和管理,MyLinux平台的建设解决了软件人才的组织和管理问题,将每一项目最合适的软件开发人才以最有效率的形式组织在一起,从而取得1+1〉2的效果。
      MyLinux(www. MyLinux.com.cn)由上海巨灵信息技术有限公司主办,是目前国内最大的网上软件加工厂,该网站将提供最完善的软件外包服务,采用流水型操作流程。详情请登陆www. MyLinux.com.cn
    您可把您的具体要求发布在http://www.mylinux.com.cn/guiderAction.do?type=7上,并留下联系方式,我们网站的技术部门和客服会在第一时间审核安排.
      

  15.   

    sswwee() ( ) 信誉:100    Blog  2006-9-14 5:39:43  得分: 0   
       
    场合一,做一程序名叫Reflector.exe,可以反编译出.net程序源码=============================================================
    说的好啊~~~哈哈~~~
      

  16.   

    http://community.csdn.net/Expert/topic/5020/5020789.xml?temp=.3727228借点人气
    接点分
      

  17.   

    在JAVA中
    反射(也可以叫映射):是RUNTIME 的事,完成类的加载,类的分析,bean的自省等功能,JBUILDER为什么敲一个类的名称后面就列出了它的成员变量和方法供你选择?如果你想知道一个对象的某种方法被调用过多少次你用什么方法?这些知识可以让你从一行Exception就能分析出错误原因.以及自己实现classloader,安全管理等方面的工作.
    反射授予了你的代码访问装载进JVM内的Java类的内部信息的权限,并且允许你编写在程序执行期间与所选择的类的一同工作的代码,而不是在源代码中。
      

  18.   

    我自己做了一个计算库,专门用来做公式的计算如
    a*b*3.2-2^ 这是简单的,还更复杂的通用函数和自定定义函数
    a^2*sin(c-5)*max(a,b,c,d)-power(c,2)+sqrt(c)+abs(d)
    等等一系列的函数,每个函数对应一处理这个函数的方法,不可能一个个去检查方法名,然后用 if ..else if ..else if 这么复杂
    我就把每个函数的处理方法名写为f_函数名,如sin的对应的处理方法为f_sin 参数是一个ArrayList,返回一个double类型的数,这样进行处理时,只要根据函数名就可以用反射的机制来调用相关的处理函数,
    这个计算库经过8个月使用和调试,已在我们公司广泛应用
    需要的朋友可以联系我,[email protected] 可免费使用
      

  19.   

    70个帖子感觉还挺难发的,谁有好的问题到这里提出来吧...
    http://community.csdn.net/Expert/topic/5016/5016795.xml?temp=.6735803
      

  20.   

    hyqer:
    分太多了没什么用,不如做点事,你要是有兴趣可以一起商量怎么用掉啊
      

  21.   

    http://blog.csdn.net/Anckly/archive/2006/07/25/977013.aspx我以前在BOLG有写过关于反射的,可以参考一下
      

  22.   

    我看用的最多的场合,莫过于反射机制获取类或成员的特性(Attribute)了。
      

  23.   

    .............好大一片VB啊。。为什么不是C#呢??