C#通过Assembly反射创建对象的实例

Love The Way You Lie 2023-02-14 13:07 67阅读 0赞

我感觉下面这个反射帮助类不错,贴出来给大家共享一下:

  1. /// <summary>
  2. /// 反射帮助类
  3. /// </summary>
  4. public static class ReflectionHelper
  5. {
  6. /// <summary>
  7. /// 创建对象实例
  8. /// </summary>
  9. /// <typeparam name="T"></typeparam>
  10. /// <param name="fullName">命名空间.类型名</param>
  11. /// <param name="assemblyName">程序集</param>
  12. /// <returns></returns>
  13. public static T CreateInstance<T>(string fullName, string assemblyName)
  14. {
  15. string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
  16. Type o = Type.GetType(path);//加载类型
  17. object obj = Activator.CreateInstance(o, true);//根据类型创建实例
  18. return (T)obj;//类型转换并返回
  19. }
  20. /// <summary>
  21. /// 创建对象实例
  22. /// </summary>
  23. /// <typeparam name="T">要创建对象的类型</typeparam>
  24. /// <param name="assemblyName">类型所在程序集名称</param>
  25. /// <param name="nameSpace">类型所在命名空间</param>
  26. /// <param name="className">类型名</param>
  27. /// <returns></returns>
  28. public static T CreateInstance<T>(string assemblyName, string nameSpace, string className)
  29. {
  30. try
  31. {
  32. string fullName = nameSpace + "." + className;//命名空间.类型名
  33. //此为第一种写法
  34. object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例
  35. return (T)ect;//类型转换并返回
  36. //下面是第二种写法
  37. //string path = fullName + "," + assemblyName;//命名空间.类型名,程序集
  38. //Type o = Type.GetType(path);//加载类型
  39. //object obj = Activator.CreateInstance(o, true);//根据类型创建实例
  40. //return (T)obj;//类型转换并返回
  41. }
  42. catch
  43. {
  44. //发生异常,返回类型的默认值
  45. return default(T);
  46. }
  47. }
  48. }

调用方法:

  1. static void Main(string[] args)
  2. {
  3. Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
  4. string aaa = assembly.FullName;
  5. Type t = typeof(test);
  6. string className = t.Name;
  7. string nameSpaceName = t.Namespace;
  8. string fullName = t.FullName;
  9. //第一种
  10. test tt = ReflectionHelper.CreateInstance<test>(fullName, aaa);
  11. tt.printTest();
  12. //第二种
  13. tt = ReflectionHelper.CreateInstance<test>(aaa, nameSpaceName, className);
  14. tt.printTest();
  15. Console.ReadKey();
  16. }

发表评论

表情:
评论列表 (有 0 条评论,67人围观)

还没有评论,来说两句吧...

相关阅读