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()
{
}
}
}