理解C#反射
参考文章:http://blog.csdn.net/educast/article/details/2894892
上面的文章将C#反射要用到的方法都给出了,下面我将写个例子,帮助理解
【1.使用反射读取程序集】
namespace Ref { class Program { static void Main(string[] args) { //读取程序集 Assembly ass = Assembly.Load("Ref"); //获取Ref程序集中的Program类 Type t = ass.GetType("Ref.Program"); //根据获取到的类创建实例 object o = Activator.CreateInstance(t); //获取方法 MethodInfo mi = t.GetMethod("Show"); //反射调用自己的方法(需要传递其类,如果是静态方法则不需要传递o,写成null就行) mi.Invoke(o, null); } public void Show() { Console.WriteLine("显示22"); } } }
【2.通过类库DLL文件的反射】
[链接:使用VS制作Dll文件]http://blog.csdn.net/u010026134/article/details/51598499
使用VS的功能,添加新建项目---类库,比如写了以下代码
namespace MyDll { public class Class1 { } public class SayAndSee { public string say = "isOk?"; public void MyFun() { string see = "isee"; Console.WriteLine("我看见你了"); } public int Cau(int num1, int num2) { return num1 + num2; } } }
然后点击生成---生成解决方法,这样我们就可以在DEBUG目录下获取到这个类的Dll文件了,获取其DLL文件路径
接下来就可以去使用了
namespace RefDLL { class Program { static void Main(string[] args) { //读取DLL文件 Assembly assembly = Assembly.LoadFrom(@"C:\Users\zts.FORTUNE\Documents\Visual Studio 2015\Projects\Test3\RefDLL\bin\Debug\MyDll.dll"); //获取MyDll程序集中的SayAndSee类 Type t = assembly.GetType("MyDll.SayAndSee"); //根据获取到的类创建实例 object o = Activator.CreateInstance(t); //获取方法 MethodInfo mi = t.GetMethod("MyFun"); //反射调用自己的方法(需要传递其类,如果是静态方法则不需要传递o,写成null就行) mi.Invoke(o, null); } } }