.NET 中的反射机制

       提到.NET,我们不得不说到一个很重要的概念——反射。说白了,反射实际上就是得到程序集中的属性和方法。在 运行时检查和处理程序元素 的功能.
例如如下功能:1、枚举类型的成员;2、实例化新对象;3、执行对象的成员;4、查找类型的信息;5、查找程序集的信息;6、检查应用于类型的定制特性;7、创建和编译新程序集.

反射的具体实现步骤如下:
【1】导入using System.Reflection;
【2】Assembly.Load("程序集")加载程序集,返回类型是一个Assembly
【3】foreach (Type type in assembly.GetTypes())
         {
          string t = type.Name;
         }
        得到程序集中所有类的名称
【4】Type type = assembly.GetType("程序集.类名");    获取当前类的类型
【5】Activator.CreateInstance(type);                               创建此类型实例
【6】MethodInfo mInfo = type.GetMethod("方法名");    获取当前方法
【7】mInfo.Invoke(null,方法参数);

**********************************************************************************************************

【《实例》】

1、引入命名空间:

   using System;
   using System.Reflection;
   using System.Configuration;
   using IDAL;

2、利用反射,在配置文件里定义好类型名,在程序运行时动态创建对象。调高了灵活性,但会有性能损失

在web.config文件中定义:

<appSettings>

<add key="DAL" value="SQLServerDAL"/>

 </appSettings>

3、

using System;
using System.Reflection;
using System.Configuration;
using IDAL;
namespace Factory
{
 /// <summary>
 /// 抽象工厂模式创建DAL。
 /// web.config 需要加入配置:(利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口)
    ///
    /// 工厂模式 + 反射机制 + 缓存机制
    ///
 /// DataCache类在导出代码的文件夹里
    /// 利用反射,在配置文件里定义好类型名,在程序运行时动态创建对象。调高了灵活性,但会有性能损失
 /// <appSettings> 
 /// <add key="DAL" value="SQLServerDAL" /> (这里的命名空间根据实际情况更改为自己项目的命名空间)
 /// </appSettings>
 /// </summary>
 public sealed class DataAccess
 {
        //这个类里使用了反射
        private static readonly string AssemblyPath = ConfigurationManager.AppSettings["DAL"];
        /// <summary>
        /// 创建对象或从缓存获取
        /// </summary>
        public static object CreateObject(string AssemblyPath, string ClassNamespace)
        {
            object objType = DataCache.GetCache(ClassNamespace);  //从缓存读取
            if (objType == null)
            {
                try
                {
                    objType = Assembly.Load(AssemblyPath).CreateInstance(ClassNamespace);//反射创建
                    //DataCache.SetCache(ClassNamespace, objType);// 写入缓存
                }
                catch
                {
                }
            }
            return objType;
        }

}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值