1. 程式人生 > 其它 >c#程式碼的執行過程及反射

c#程式碼的執行過程及反射

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