下面看一个例子:
首先我在D:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\反射\ClassLibrary1\bin\Debug\目录下创建了一个名为ClassLibrary1.dll的类库,实现了加和减的功能。如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
class Class1
{
/// <summary>
/// 加法
/// </summary>
/// <param name="a">第一个加数</param>
/// <param name="b">第二个加数</param>
/// <returns></returns>
public int add(int a, int b)
{
return a + b;
}
/// <summary>
/// 减法
/// </summary>
/// <param name="a">被减数</param>
/// <param name="b">减数</param>
/// <returns></returns>
public int jian(int a, int b)
{
return a - b;
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary1
{
class Class1
{
/// <summary>
/// 加法
/// </summary>
/// <param name="a">第一个加数</param>
/// <param name="b">第二个加数</param>
/// <returns></returns>
public int add(int a, int b)
{
return a + b;
}
/// <summary>
/// 减法
/// </summary>
/// <param name="a">被减数</param>
/// <param name="b">减数</param>
/// <returns></returns>
public int jian(int a, int b)
{
return a - b;
}
}
}
下面我用反射的方式实例化对象并调用方法:
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;//实现反射的命名空间
namespace 反射
{
class Program
{
static void Main(string[] args)
{
Assembly a = Assembly.LoadFrom(@"D:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\反射\ClassLibrary1\bin\Debug\ClassLibrary1.dll");//类库的存储路径
Type type = a.GetType("ClassLibrary1.Class1");//此处必须为类的完整名称
Object o = Activator.CreateInstance(type);//实例化类
MethodInfo method_add = type.GetMethod("add");//得到方法的信息
int i = (int)method_add.Invoke(o, new object[] { 1,2});//实现方法
Console.WriteLine(i);
}
}
}
可以看到,类的一些信息都是作为字符串的方式传入的,这就大大增加了程序的灵活性,可以通过配置文件的方式进行调用。反射的性能要低一些,实际中要合理应用。using System.Collections.Generic;
using System.Text;
using System.Reflection;//实现反射的命名空间
namespace 反射
{
class Program
{
static void Main(string[] args)
{
Assembly a = Assembly.LoadFrom(@"D:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\反射\ClassLibrary1\bin\Debug\ClassLibrary1.dll");//类库的存储路径
Type type = a.GetType("ClassLibrary1.Class1");//此处必须为类的完整名称
Object o = Activator.CreateInstance(type);//实例化类
MethodInfo method_add = type.GetMethod("add");//得到方法的信息
int i = (int)method_add.Invoke(o, new object[] { 1,2});//实现方法
Console.WriteLine(i);
}
}
}