标签:c class blog code java http
System.Reflection.Assembly类是一个比较常用到的类,在反射中就经常用到。
由于这个类实在有太多的字段、属性与方法。实在不想将一个个属性方法从MSDN复制出来然后逐个属性、方法敲一次,我想改变一下学习方法,从实际运用学习。
使用反射加载程序集并执行方法,加载程序集主要使用LoadFrom()方法。
static void Main(string[] args) { Assembly ass = Assembly.LoadFrom(@"D:\test.dll"); Type type = ass.GetType("Test.Add"); //注意要输入全部路径,包括命名空间 object obj = Activator.CreateInstance(type); MethodInfo Add = type.GetMethod("AddCalculate"); //根据方法名获取MethodInfo对象 int i = (int)Add.Invoke(obj, new object[2] { 1, 2 }); Console.WriteLine(i); Console.ReadKey(); }
以上程序运行输出3。
注意在Assembly里面的加载程序集有3个方法,分别是Load、LoadFrom和LoadFile。这3个方法有什么异同呢?
LoadFrom 方法具有以下缺点。请考虑改用 Load。
总结: LoadFrom只能用于加载不同标识的程序集, 也就是唯一的程序集, 不能用于加载标识相同但路径不同的程序集。
3.LoadFile 加载指定路径上的程序集文件的内容。
这个方法是从指定的文件来加载程序集,它是调用外部的API实现的加载方式,和上面Load,LoadFrom方法的不同之处是这个方法不会加载此程序集引用的其他程序集,也就是不会加载程序的依赖项。而同时也是不能加载相同标识的程序集的。
4.GetExecutingAssembly获取当前正在执行的程序集。
示例:
static void Main(string[] args) { //需引用命名空间 Assembly assm = Assembly.Load("fanshe"); Console.WriteLine(assm.FullName); //输出 fanshe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null //依靠路径 Assembly assm1 = Assembly.LoadFrom(@"D:\fanshe.dll"); Console.WriteLine(assm1.FullName); ////输出 fanshe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null //与Assembly.LoadFrom基本一样,只是如果被加载的dll,还依赖其他的dll的话,被依赖的对象不会加载 Assembly assm2 = Assembly.LoadFile(@"D:\fanshe.dll"); Console.WriteLine(assm2.FullName); //当前正在执行的程序集 Assembly assm3 = Assembly.GetExecutingAssembly(); Console.WriteLine(assm3.FullName); Console.ReadKey(); }
读取嵌入的资源,主要有如下两个方法:
static void Main(string[] args) { Assembly ass = Assembly.LoadFrom(@"D:\test.dll"); string[] names = ass.GetManifestResourceNames(); foreach (string name in names) { Console.WriteLine("所有的嵌入资源名:" + name); } Stream myStream = ass.GetManifestResourceStream("Test.1.txt"); Console.WriteLine(); using (StreamReader sr = new StreamReader(myStream, Encoding.Default)) { //嵌入的资源1.txt的内容 Console.WriteLine("嵌入的资源1.txt的内容:" + sr.ReadToEnd()); } Console.ReadKey(); }
标签:c class blog code java http
原文地址:http://www.cnblogs.com/mingxuantongxue/p/3761603.html