通过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; }
}
}
}
本文介绍如何使用C#的反射机制动态加载DLL,并演示了如何调用DLL中的静态和非静态方法,以及如何设置和获取类的属性。
1392

被折叠的 条评论
为什么被折叠?



