首页 > 代码库 > 步步为营-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
    }
}
View Code

技术分享

4

步步为营-31-反射基础