Board logo

标题: .net的反射机制(1) [打印本页]

作者: look_w    时间: 2019-4-16 19:12     标题: .net的反射机制(1)

学习4点:

1.反射有什么用,什么情况下用反射。                  (参考资料http://dotnet.9sssd.com/csbase/art/733

2.通过简单的例子理解反射的运用。                     (参考资料http://www.2cto.com/kf/201110/109636.html

3.通过复杂的例子理解更多反射的用法,语法。(参考资料ttp://blog.163.com/shensc@126/blog/static/13128965220106183155664/)

4.反射的性能优化。                                                 (参考资料http://www.soaspx.com/dotnet/asp.net/tech/tech_20120407_8898.html


1.反射有什么用,什么情况下用反射。  


反射机制就是你给它一个类或者程序集,它就能知道这个类或者程序集中有什么方法和类型属性,然后模拟出这个类中的方法和类型属性。


这样我们就可以很灵活动态的创建需要的类,调用相应的方法。


一般我们遇到多个类似的功能实现用同一个接口时但还不能确定是用哪一个实现时就可以用反射作出相应的判断。


在抽象工厂模式中经常用反射,典型的例子是数据读取层。

一个项目可能用到SqlSever,Access,Orace或者Txt,XML来当存取数据,他们的方法都是统一,比如增,删,修,读等。

这个时候就是定义一个IDataAccess接口,这个接口定义了统一的方法,增,删,修,读等,然后分别用不同的实现类来继承这个接口,比如SqlServer类,XmL类,定义为SqlServerDataAccess,XMLDataAccess,他们都继承IDataAccess。

在应用的时候项目可以通过简单的修改或者配置来使用Sqlserver或者XML数据库,这个时候就可以使用反射来决定接口IDataAccess到底使用哪个实现类。

抽象工厂模式中使用配置文件来设置使用Sqlserver还是XML数据实现类。在配置文件中定义“程序集和命名空间类名”的信息,这样通过修改配置文件就可以决定使用Sqlserver还是XML数据实现类。


2.通过简单的例子理解反射的运用。

首先,我新建一个普通的类库项目。在该项目的测试类中,定义好 属性、静态方法、实例方法、无参方法等...



代码如下:

    using System;
     
    using System.Collections.Generic;
     
    using System.Linq;
     
    using System.Text;  
     
    namespace ReflectorTest
     
    {
     
        class Test
     
        {
     
            private string name;
     
            public string Name { get; set; }
     
            /// <summary>
     
            /// 静态方法
     
            /// </summary>
     
            /// <returns></returns>
     
            public static string staticMethod(string  name)
     
            {
     
                return name+"这是一个静态方法";
     
            }
     
            /// <summary>
     
            /// 实例方法
     
            /// </summary>
     
            /// <param name="name"></param>
     
            /// <returns></returns>
     
            public string sayHello(string name)  
     
            {
     
                return "你好:" + name+"我是一个有参的方法";
     
            }
     
            /// <summary>
     
            /// 无参的方法
     
            /// </summary>
     
            /// <returns></returns>
     
            public string noParm()  
     
            {
     
                return "我是一个无参方法";
     
            }
     
        }
     
    }




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0