通过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; } } } }