1.反射加载DLL
以下提供了两种加载DLL的方式
1.使用方法 Assembly.Load 加载
2.使用方法 Assembly.LoadFile 加载
Assembly assembly;
string path;
//1.动态加载
path = "HslCommunication";
assembly =Assembly.Load(path);
path = "c:\\users\\刘哲\\documents\\visual studio 2015\\Projects\\Practice\\Practice\\bin\\Debug\\DLLS\\HslCommunication.dll";
assembly = Assembly.LoadFile(path);
2.反射方法
Assembly assembly;
string path;
//1.动态加载
//path = "HslCommunication";
//assembly =Assembly.Load(path);
path = "c:\\users\\刘哲\\documents\\visual studio 2015\\Projects\\Practice\\Practice\\bin\\Debug\\DLLS\\HslCommunication.dll";
assembly = Assembly.LoadFile(path);
Type[] types = assembly.GetTypes();//获取程序集中定义的类型
foreach (Type type in types)
{
MethodInfo[] methodInfos = type.GetMethods();//获取方法
foreach (MethodInfo methodInfo in methodInfos)
{
}
}
3.创建对象
{
//1.动态加载
path = "CommonTool";
assembly = Assembly.Load(path);
//2.获取类型
Type[] types = assembly.GetTypes();//获取程序集中定义的类型
string FullName = "CommonTool.LogMgr";
Type mType = assembly.GetType(FullName);
//3.创建对象
object obj = Activator.CreateInstance(mType);
(obj as CommonTool.LogMgr).WriteLog("111");
///通过动态类型创建
dynamic mObj= Activator.CreateInstance(mType);
mObj.WriteLog("222");
}
4.获取方法
//1.动态加载
path = "CommonTool";
assembly = Assembly.Load(path);
//2.获取类型
Type[] types = assembly.GetTypes();//获取程序集中定义的类型
string FullName = "CommonTool.LogMgr";
Type mType = assembly.GetType(FullName);
//3.创建对象
object obj = Activator.CreateInstance(mType);
//4.获取方法
MethodInfo methodInfo = mType.GetMethod("WriteLog");
methodInfo.Invoke(obj,new object[]
{
"5565"
});
4.1方法重载
//1.动态加载
path = "CommonTool";
assembly = Assembly.Load(path);
//2.获取类型
Type[] types = assembly.GetTypes();//获取程序集中定义的类型
string FullName = "CommonTool.RTest";
Type mType = assembly.GetType(FullName);
//3.创建对象
object obj = Activator.CreateInstance(mType);
//4.获取方法
MethodInfo methodInfo = mType.GetMethod("T1",new Type[0]);
methodInfo.Invoke(obj, new object[0]);
//4.1方法重载
methodInfo = mType.GetMethod("T1",new Type[] {typeof(int)});
methodInfo.Invoke(obj, new object[]
{
4
});
methodInfo = mType.GetMethod("T1", new Type[] { typeof(string) });
methodInfo.Invoke(obj, new object[]
{
"55"
});
methodInfo = mType.GetMethod("T1", new Type[] { typeof(int), typeof(string) });
methodInfo.Invoke(obj, new object[]
{
5, "55"
});
4.2反射的黑科技
1.单例类
/// <summary>
/// 单例模式:类,能保证在整个进程中只有一个实例
/// </summary>
public sealed class Singleton
{
private static Singleton _Singleton = null;
private Singleton()
{
Console.WriteLine("Singleton被构造");
}
static Singleton()
{
_Singleton = new Singleton();
}
public static Singleton GetInstance()
{
return _Singleton;
}
}
在这里插入代码片