反射指程式可以訪問、檢測和修改它本身狀態或行為的一種能力。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集、模組和型別的物件。
您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性。
/// /// 軟體執行
///
public class softwareruns
private set
}private bool _isqqsclauncher;
///
public bool isqqsclauncher
private set
}private bool _issnipaste;
/// /// snipaste截圖
///
[description("snipaste截圖")]
public bool issnipaste
private set
}public softwareruns(bool iswechat,bool isqqsclauncher,bool issnipaste)
}
**段public softwareruns(bool iswechat,bool isqqsclauncher,bool issnipaste),在電腦只有三個軟體的時候,初始化並沒有多大的問題。一旦我後面又加了一堆屬性後,就會發現重複的**增多了。
private bool _isdevenv;
/// /// visualstudio2017
///
[description("visualstudio2017")]
public bool isdevenv
private set
}private bool _isssms;
/// /// managementstudio2012
///
[description("managementstudio2012")]
public bool isssms
private set
}public softwareruns(bool iswechat, bool isqqsclauncher, bool issnipaste, bool isdevenv)
這僅僅只是加了乙個形參,如果後面電腦安裝了n多的軟體後,這個類的初始化的形參需要多少個?
類的屬性不斷增加。
類初始化**時,減少重複性**。
為了解決這種現象,早上在論壇裡請教大佬們如何縮減**,最後採用了大佬@bridge_go的建議,使用字典對類進行例項化。
/// /// 通過反射修改屬性
/// dictionary《屬性名,值》
///
///
public softwareruns(dictionary_dic)
}
形式引數dictionary,string存放softwareruns的屬性名,bool存放softwareruns的屬性值。利用放射迴圈遍歷替換softwareruns的值。
setvalue:第乙個引數填寫將設定其屬性值的物件,如果初始化了乙個softwareruns物件sr,那麼填sr,這裡不同,沒有傳入其他物件,那麼用this關鍵字來代替。
這麼一改,初始化物件可能有些囉嗦了,因為都是bool型別的屬性,我只在字典新增了為true的值。
開啟任務管理器類taskmanager,想要看看有哪些程式正在執行。
/// /// 輸出
///
///
public void print(softwareruns software)
隨著軟體增多,print方法將會 變得十分臃腫。
if...else判斷過多。
縮減if..else分支,減少重複性**。
通過propertyinfo來獲取屬性的資訊。
/// /// 輸出
某些情況下,if...else判斷中,執行方法僅僅只有某個入參值不一樣。
///
private uri wechaturi }
///
private uri qqsclauncheruri }
/// /// snipaste截圖軟體安裝路徑
///
private uri snipasteuri }
/// /// 關閉應用程式
///
///
public void close(softwareruns software)
if...else判斷過多。
縮減if..else分支,減少重複性**。
通過propertyinfo和activator來縮減**。
/// /// 關閉應用程式
以上內容只為方便理解。
提取碼:wwqp
csnd:
反射的基本用法
最近看spring原始碼,突然發現有好多地方都用到了反射,特此來回顧一下 先來建立userinfo基礎類 public class userinfo private userinfo string name,integer age,string shool public userinfo strin...
java反射機制的基本用法
1 獲取乙個class物件 class c this.getclass reflectimplement r new reflectimplement 通過類例項獲得 class c1 r.getclass class subclass c1.getsuperclass 通過類例項獲得父類物件 cl...
c 反射用法例子
using system using system.collections.generic using system.text using system.reflection namespace refdemo 通過呼叫帶參的建構函式來得到物件 constructorinfo ci type.get...