说明 :简单练习反射的基础包括获取dll中的数据,方法等
程序集之间互相调用可以通过:a添加引用,b引入命名空间,来实现.但是只能调用public修辞的方法和属性.另外还可通过程序集调用
1 创建一个控制台应用程序
2 创建一个类库,用于生成dll,注意修改属性,使其生成的路径为控制台应用程序bin/debug目录(方便修改)
3 获取程序集数据
加载程序集,获取程序集数据
3.1 加载程序集--Assembly.LoadFile(path);
public static Assembly LoadAssembly() { //01 注意是绝对路径 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Common.dll"); //02 加载程序集 return Assembly.LoadFile(path); }
3.2 获取数据
3.2.1 方法A获得程序集所有数据类型 ass.GetTypes()
3.2.2 方法B获得程序集所有--public数据类型 ass.GetExportedTypes()
3.2.3 方法C根据数据名称获得指定数据,可以是私有的 ass.GetType("Common.Teacher")
#region 02-获取数据(abc三种常见的方法) /// <summary> /// 方法A获得程序集所有数据类型 /// </summary> /// <param name="ass">程序集名称</param> /// <returns></returns> private static Type[] A_GetTypes(Assembly ass) { Type[] types = ass.GetTypes(); return types; } /// <summary> /// 方法B获得程序集所有--public数据类型 /// </summary> /// <param name="ass">程序集名称</param> /// <returns></returns> private static Type[] B_GetExportedTypes(Assembly ass) { Type[] types = ass.GetExportedTypes(); return types; } /// <summary> /// 方法C根据数据名称获得指定数据,可以是私有的 /// </summary> /// <param name="ass">程序集名称</param> /// <returns></returns> private static Type[] C_GetType(Assembly ass) { Type atype = ass.GetType("Common.Teacher"); Type[] types = { atype }; return types; } #endregion
小结代码+运行效果
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace 反射_基础 { class Program { static void Main(string[] args) { Assembly ass = LoadAssembly(); if (ass!=null) { Console.WriteLine("获得所有数据"); Type[] typesA = A_GetTypes(ass); ShowItem(typesA); Console.WriteLine(); Console.WriteLine("获得所有public数据"); Type[] typesB = B_GetExportedTypes(ass); ShowItem(typesB); Console.WriteLine(); Console.WriteLine("获得指定数据,可以是私有的"); Type[] typeC = C_GetType(ass); ShowItem(typeC); } Console.Read(); } #region 01加载程序集 public static Assembly LoadAssembly() { //01 注意是绝对路径 string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Common.dll"); //02 加载程序集 return Assembly.LoadFile(path); } #endregion #region 02-获取数据(abc三种常见的方法) /// <summary> /// 方法A获得程序集所有数据类型 /// </summary> /// <param name="ass">程序集名称</param> /// <returns></returns> private static Type[] A_GetTypes(Assembly ass) { Type[] types = ass.GetTypes(); return types; } /// <summary> /// 方法B获得程序集所有--public数据类型 /// </summary> /// <param name="ass">程序集名称</param> /// <returns></returns> private static Type[] B_GetExportedTypes(Assembly ass) { Type[] types = ass.GetExportedTypes(); return types; } /// <summary> /// 方法C根据数据名称获得指定数据,可以是私有的 /// </summary> /// <param name="ass">程序集名称</param> /// <returns></returns> private static Type[] C_GetType(Assembly ass) { Type atype = ass.GetType("Common.Teacher"); Type[] types = { atype }; return types; } #endregion #region 03-显示数据 private static void ShowItem(Type[] types) { foreach (var item in types) { Console.WriteLine(item.Name); } } #endregion } }
4
原文:http://www.cnblogs.com/YK2012/p/6751998.html