C 反射的基本用法

2021-10-07 23:18:58 字數 3128 閱讀 2683

反射指程式可以訪問、檢測和修改它本身狀態或行為的一種能力。

程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集、模組和型別的物件。

您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性。

/// /// 軟體執行

///

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...