0.c#代码的执行过程:
c#(编译器)-->dll/exe(metadata/IL)-->CRL-->机器码
1. appsettings.json配置文件配置要访问的类和dll
"ReflictionConfig": "Zhaoxi.AspNetCore.DB.MySql.MySqlHelper,Zhaoxi.AspNetCore.DB.MySql.dll"
2.代码读取dll,实例化一个配置类的对象
public static IDBHelper CreateInstance()
{
string ReflictionConfig = CustomConfigManager.GetConfig("ReflictionConfig");
string tyepName= ReflictionConfig.Split(",")[0];
string dllName = ReflictionConfig.Split(",")[1];
//Assembly assembly = Assembly.Load(dllName); //Dll名称,不需要后缀
Assembly assembly3 = Assembly.LoadFrom(dllName); //dll名称(需要后缀)
Type type = assembly3.GetType(tyepName);
object obj = Activator.CreateInstance(type);
return obj as IDBHelper;
}
3. 反射可以突破方法的权限限制
100_000_000
4. 反射性能并不会消耗多大,100万次循环和普通方法相差3倍的时间,
单例模式=是一种常见类的写法,
public class SingletonA
{
//私有成员,使用时分配内存
private static SingletonA _instance = null;
//私有构造,杜绝直接new类
private SingletonA() { }
//获取实例
public static SingletonA GetInstance ()
{
if (_instance == null)
{
_instance = new SingletonA();
}
return _instance;
}
}
本文摘自 :https://blog.51cto.com/u