http://net-liu.iteye.com/blog/696770
通過Assembly來動態加載DLL
//从DLL文件加载程序集
static Assembly amy = Assembly.LoadFrom("Student.dll");
//创建新类
static Type type = amy.GetType("Student.Stu");
private void button1_Click(object sender, EventArgs e)
{
//静态成员
string strDyNamic= (string)type.InvokeMember("GetNewValue",
BindingFlags.DeclaredOnly |
BindingFlags.Public | BindingFlags.Static |
BindingFlags.InvokeMethod, null, null,
new object[] {"Static"});
MessageBox.Show(strDyNamic);
//非静态成员
object obj = type.InvokeMember(null,BindingFlags.DeclaredOnly|
BindingFlags.Public|BindingFlags.NonPublic|
BindingFlags.Instance|BindingFlags.CreateInstance,
null,null,null);
string strStatic = (string)type.InvokeMember("GetValue",
BindingFlags.DeclaredOnly|
BindingFlags.Public|BindingFlags.NonPublic|
BindingFlags.Instance|BindingFlags.InvokeMethod,
null,obj,new object[]{"NonStatic"});
MessageBox.Show(strStatic);
//设置类的属性
type.InvokeMember("Name",BindingFlags.DeclaredOnly|
BindingFlags.Public |BindingFlags.NonPublic|
BindingFlags.Instance|BindingFlags.SetProperty,
null,obj,new object[]{"Test"});
//获取类的属性
string property = (string)type.InvokeMember("Name",BindingFlags.DeclaredOnly|
BindingFlags.Public|BindingFlags.NonPublic|
BindingFlags.Instance|BindingFlags.GetProperty,
null,obj,null);
MessageBox.Show(property);
}
DLL代碼大致如下
namespace Student
{
public class Stu
{
public Stu()
{
strName = "";
}
public string GetValue(string strText)
{
return string.Format("Print NonStatic {0}!", strText);
}
public static string GetNewValue(string strText)
{
return string.Format("Print static {0}!", strText);
}
private string strName;
public string Name
{
get { return strName; }
set { strName = value; }
}
}
}