首页 > 代码库 > 步步为营-31-反射基础
步步为营-31-反射基础
说明 :简单练习反射的基础包括获取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
步步为营-31-反射基础
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。