using System;using System.Collections.Generic;using System.Text;
using System.Reflection;namespace RefDemo{ class Program { static void Main(string[] args) { //通过反射得到 RefDemo.Test 类的类型(有两种方式)
//第一种方式:获取当前正在运行的程序集中的类型,类型为“命名空间.类型” //Type type = Assembly.GetExecutingAssembly().GetType("RefDemo.Test");
//第二种方式:加载指定的程序集,再获取其中的类型,Load()方法中的参数为程序集名称 Type type = Assembly.Load("RefDemo").GetType("RefDemo.Test");
//通过反射调用Test类的静态方法StaticMethod type.GetMethod("StaticMethod").Invoke(null, null);
//通过反射创建 RefDemo.Test 类的对象(不带参的构造函数) object obj = Assembly.GetExecutingAssembly().CreateInstance("RefDemo.Test");
//通过反射调用 obj 对象的 TestMethod3 方法,不带参数 type.GetMethod("TestMethod2").Invoke(obj, null);
//通过反射调用 obj 对象的 TestMethod3 方法,并传一个参数(值为 aaa ) type.GetMethod("TestMethod3").Invoke(obj, new object[] { "aaa" });
//通过调用带参的构造函数来得到对象 ConstructorInfo ci = type.GetConstructor(new Type[] { typeof(string) }); object test = ci.Invoke(new object[] { "bbb" }); type.GetMethod("TestMethod3").Invoke(test, new object[] { "bbb" }); } }
public class Test { public static void StaticMethod() { Console.WriteLine("StaticMethod方法的输出"); }
public static void TestMethod2() { Console.WriteLine("TestMethod2方法的输出"); } public static void TestMethod3(string str) { Console.WriteLine(str); }
public Test(string str) { this._str = str; } string _str; public void GetStr() { Console.WriteLine(this._str); } public Test() { } }}