檢舉內容
玩轉C#之【反射 射爆妳】

2022/09/09閱讀時間約 3 分鐘

介紹

反射:System.Reflection .Net框架提供的Library,可以讀取並使用metadata

Dll-IL-Metadata-反射

📷
人類在開發的時候寫的是高級語言C#,最終會變成機械碼
在.net framework有二次編譯的概念,二次編譯,為了不同平台上使用,加上一層中間層,更靈活
  1. 透過VS編譯器 編譯成dll/exe
  2. 點擊exe的時候,他有一個依賴的環境叫做CLR
dll/exe裡面包含兩大塊IL(中間語言),metadata(元數據)
metadata會紀錄這dll/exe裡面有哪些東西<=反射主要在做這塊
IL:可以透過ILSpy(反編譯工具)
📷

反射+屬性(Property/Field)

public class People
{
public People()
{
Console.WriteLine("{0}",this.GetType().FullName);
}
public int Id{get;set;}//Property

public string Name{get;set;}//Property

public string Description;//Field
}
一般情況
People people = new People();
people.Id = 123;
people.Name ="Lucy";
people.Description ="高級班";
反射寫法
Type type =typeof(People);
object oPeople = Activator.CreateInstance(type);
foreach(var item in type.GetProperties())
{
Console.WriteLine(type.Name);
Console.WriteLine(item.Name);
Console.WriteLine(item.GetValue(oPeople));
if(item.Name.Equals("Id"))
{
item.SetValue(oPeople,234);
}else if(item.Name.Equals("Name"))
{
item.SetValue(oPeople,"風蕭蕭");
}

}
foreach(var item in type.GetFields())
{
Console.WriteLine(type.Name);
Console.WriteLine(item.Name);
Console.WriteLine(item.GetValue(oPeople));
if(item.Name.Equals("Description"))
{
item.SetValue(oPeople,"昕學員");
}
}

反射好處和限制

反射優點:動態
反射缺點:
1.寫起來複雜
2.避開編譯器的檢查
3.效能問題
關於反射破壞單力模式、反射工廠封裝、反射泛型、反射黑科技=> 使用私有方法之後會專門寫一篇文章跟大家講解

參考資料

本篇已同步發表至個人部落格
https://moushih.com/2022ithome08/
鐵人賽文章
https://ithelp.ithome.com.tw/articles/10288591
贊助創作者百元,就抽 $8,888 紅包與好禮!
一代軍師
一代軍師
程式語言、理財自我投資、加密貨幣、資訊安全 https://moushih.com/
如果要發表留言,請先登入註冊會員
享受沈浸的閱讀體驗
徜徉在不受干擾的簡約介面,瀏覽數百萬篇原創內容。
領取見面禮
只要設定追蹤作者,即可享有 48小時
Premium 閱讀權限