DLL代碼:
using System;
namespace clsTestDll
{
public class TestDll
{
private string strName;
public TestDll()
{
strName = "";
}
public string GetValue(int nCount)
{
return string.Format("Count is {0}!", nCount);
}
public static string GetNewValue(int nCount)
{
return string.Format("New count is {0}!", nCount);
}
public string Name
{
get { return strName; }
set { strName = value; }
}
}
}
調用程序代碼:
using System;
using System.Reflection;
namespace TestString
{
class Program
{
public static void Main()
{
Assembly assembly = Assembly.LoadFrom(@"E:\clsTestDll.dll");
Type type = assembly.GetType("clsTestDll.TestDll");
/*調用DLL中的靜態方法*/
string returnStaticStr = (string)type.InvokeMember(
"GetNewValue",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.Static
| BindingFlags.InvokeMethod,
null, null, new object[] { 12 });
/*調用DLL中的非靜態方法*/
//1.新建一個object
Object newObject = type.InvokeMember(
null,
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.CreateInstance,
null, null, null);
//2.使用object調用DLL中的非靜態方法
string returnNostaticStr = (string)type.InvokeMember(
"GetValue",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.InvokeMethod,
null, newObject, new object[] { 20 });
/*調用DLL中的屬性*/
//1.設置屬性的值
type.InvokeMember(
"Name",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.SetProperty,
null, newObject, new object[] { "PropertyTest" });
//2.調用屬性
string getProperty = (string)type.InvokeMember(
"Name",
BindingFlags.DeclaredOnly
| BindingFlags.Public
| BindingFlags.NonPublic
| BindingFlags.Instance
| BindingFlags.GetProperty,
null, newObject, null);
Console.WriteLine(returnStaticStr);
Console.WriteLine(returnNostaticStr);
Console.WriteLine(getProperty);
Console.ReadKey();
}
}
}
輸出結果:
New count is 12!
Count is 20!
PropertyTest
解釋:
public object InvokeMember(string,BindingFlags,Binder,object,object[]);
string:要調用的成員名
BindingFlags:要調用的函數的屬性,可以組合,System.Reflection.BindingFlags
Binder:高級內容,先不看
object:調用該成員的實例
object[]:傳給要調用的函數的參數列表或者要給屬性賦的值