品牌网站建设權威大蝌蚪,邢台市行政区划图,工作总结个人,设计制作活动主题概述程序运行时#xff0c;通过反射可以得到其它程序集或者自己程序集代码的各种信息#xff0c;包括类、函数、变量等来实例化它们#xff0c;执行它们#xff0c;操作它们#xff0c;实际上就是获取程序在内存中的映像#xff0c;然后基于这个映像进行各种操作。Assemb…概述 程序运行时通过反射可以得到其它程序集或者自己程序集代码的各种信息包括类、函数、变量等来实例化它们执行它们操作它们实际上就是获取程序在内存中的映像然后基于这个映像进行各种操作。Assembly介绍Assembly类即程序集类用来加载其他程序集加载后可以用Type来使用其他程序集中的信息如果想要使用其它程序集中的内容需要先加载程序集。加载程序集的三种方法①、一般用来加载同一文件下的其他程序集Assembly assembly Assembly.Load(“AssemblyName”);②、一般用来加载不再同一文件下的其他程序集Assembly assembly Assembly.LoadFrom(“包含程序集清单的文件的名称或路径”);Assembly assembly Assembly.LoadFile(“要加载的文件的完全限定路径”);使用方法Assembly asm Assembly.LoadFrom(Demo.dll);//需要加后缀可以指定路径如:Assembly.LoadFrom(C:\Users\majm\source\repos\ConsoleApp29\bin\Debug\TestDll.dll);Assembly asm Assembly.Load(Demo);//无需加后缀不可以指定路径,使用Load可以加载当前程序bin目录行下的程序集或者系统程序集定义数据模型创建类库并生成dllnamespace TestDll
{public class Person{public Person(){Name zls;Age 18;id 20;}public Person(string name, int age){Name name;Age age;id 21;}public string Name { get; set; }public int Age { get; set; }public int id;public int Score(int a, int b){return a b;}}
}第一步首先加载一个指定程序集Assembly assembly Assembly.LoadFrom(C:\Users\majm\source\repos\ConsoleApp29\bin\Debug\TestDll.dll);Type[] types assembly.GetTypes();for (int i 0; i types.Length; i){Console.WriteLine(types[i]);}运行结果第二步加载程序集中类对象并调用方法传入参数Type c1 types[0];object obj Activator.CreateInstance(c1);//调用Class1类中的Speak方法MethodInfo speak c1.GetMethod(Score);object[] o new Object[2] {12,13 };var result speak.Invoke(obj, o);Console.WriteLine(result);运行结果25这里还可以这样如下去创建实例Type c1 types[0];Assembly asm Assembly.GetAssembly(c1);Person person (Person)asm.CreateInstance(TestDll.Person, true);//true不区分大小写//调用Person1类中的Score方法MethodInfo speak c1.GetMethod(Score);object[] o new Object[2] {12,13 };var result speak.Invoke(person, o);Console.WriteLine(result);一样的效果,如果是当前程序集可以GetExecutingAssembly获取程序集Assembly asm Assembly.GetExecutingAssembly();