using System; using System.Collections.Generic; using System.Linq; using System.Reflection;// <------------- 添加引用 using System.Text; using System.Threading.Tasks; namespace 反射Reflection { class Program { static void Main(string[] args) { //加载DLL,要放在编译目录下 Assembly ass = Assembly.Load("TestClassLibrary"); //----------------------- 获取DLL模块 --------------------- //获取指定的DLL模块 Module dll = ass.GetModule("TestClassLibrary.dll"); //获取全部DLL模块,dlls[0] = TestClassLibrary.dll Module[] dlls = ass.GetModules(); //---------------------- 获取模块中的类 ---------------------- //获取指定的类 Type tagT = ass.GetType("TestClassLibrary.Class1"); string dd = tagT.Name; //获取所有类 Type[] tpyes = ass.GetTypes(); //---------------------- 创建实例 ---------------------- //用这个类创建实例 object aTagObject = Activator.CreateInstance(tagT); //一般是通过接口创建一个返射模块中的类对象 //这需要模块和主程序都引用接口 //---------------------- 获取类的方法 ---------------------- //获取方法的信息 MethodInfo[] methods = tagT.GetMethods(); MethodInfo method_getSize = tagT.GetMethod("getSize"); //调用无参无返的方法(输入一个此类的实例,无参则给空,或 new object[] { }) method_getSize.Invoke(aTagObject, new object[] { }); //调用无参有返的方法 //调用方法的一些标志位,这里的含义是Public并且是实例方法,这也是默认的值 BindingFlags flag = BindingFlags.Public | BindingFlags.Instance; //GetValue方法的参数放在{}中 object[] parameters = new object[] { }; //调用方法,用一个object接收返回值 object returnValue = method_getSize.Invoke(aTagObject, flag, Type.DefaultBinder, parameters, null); //---------------------- 获取类的属性 ---------------------- MemberInfo[] mem = tagT.GetMembers(); MemberInfo[] libName = tagT.GetMember("libName"); Console.Write(""); } } }