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);