C#通过表达式目录树构建对象实例+缓存

/*********************************************************
 * 创 建 人:事理
 * 创建时间:2012-03-01 9:11
 * 修 改 人:
 * 修改时间:
 * 版权所有:Copyright © 
 * 描    述:
 * *******************************************************/
using System;
using System.Collections;
using System.Linq.Expressions;

namespace DBUtility
{
    /// <summary>
    /// 通过表达式目录树构建对象实例(使用缓存) 
    /// .net3.5以上版本支持,.net2.0、.net4.0使用Activator.CreateInstance,.net4.0默认已经使用了缓存
    /// </summary>
    public static class CreateInstance
    {
        private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());//缓存

        /// <summary>
        /// 根据对象类型创建对象实例
        /// </summary>
        /// <param name="key">对象类型</param>
        /// <returns></returns>
        public static object CreateInstanceByExpression(Type key)
        {
            Func<object> value = (Func<object>)paramCache[key];
            if (value == null)
            {
                value = CreateInstanceByType(key);
                paramCache[key] = value;
            }
            return value();
        }

        private static Func<object> CreateInstanceByType(Type type)
        {
            return Expression.Lambda<Func<object>>(Expression.New(type), null).Compile();
        }
    }
}

1.Type type = typeof(ClassName); 

  ClassName classObject=(ClassName)CreateInstance.CreateInstanceByExpression(type);

2.ClassName classObject=(ClassName)Activator.CreateInstance(type);

posted @ 2012-08-27 07:58  事理  阅读(2039)  评论(0编辑  收藏  举报