反射的實現主要依賴於微軟提供的兩個命名空間:system.reflection 和system.type 兩個命名空間:
反射:就是動態的獲取程式集,並獲取其中型別的元資料,然後訪問該型別的過程。
可以在執行時 建立 訪問 呼叫 型別。
反射在實際應用中通常被用於: 深複製實現,資料庫datatable 轉換成執行的型別 等。
情況①:當我們不知道物件的時候(t)我們通常使用下面的方式來獲取某個型別的type
type type=typeof(t);
情況②:當我們已知某個物件的時候 我們可以直接使用gettype(),方法來獲取指定物件型別的type物件
如:person p=new person();
type persontype=p.gettype();
1:獲取類中的所有方法(不包括私有方法)
methodinfo methods=type.getmethods();
2:獲取某個型別的所有屬性(私有屬性也無法獲取到)
propertyinfo propertyinfo=type.getproperties();
3:獲取型別的所有字段(私有欄位也無法獲取到)
fieldinfo fields=type.getfields();
4:獲取所有成員,不包括私有成員
memberinfo memberinfos=type.getmembers();
#通過反射來獲取乙個程式集的型別
1:動態載入 .dll檔案
assembly assembly=assembly.loadfile(@"檔案路徑")
2:獲取剛剛載入的程式集中的所有型別
type type=assembly.gettypes();
3:獲取訪問修飾符為 public的型別
type type =assembly.getexportedtypes();:
4:獲取某個類的type
type type=assembly.gettype("命名空間.類名");
5:根據4中的type獲取某個特定的方法(根據方法名)
methodinfo method=type.getmethod("方法名");
7:呼叫這個方法
method.invoke()
8:通過反射來 建立某個型別的物件(其實就是通過型別的type 來建立該型別的物件)
object obj=activator.createinstance(type);
method.invoke(obj,null)
三:通過反射獲取類的屬性,並賦值
1:獲取name屬性
propertyinfo property=type.getproperty("name");
object obj=activator.createinstance(property);
2:為屬性賦值
property.setvalue(obj,"姓名",null)
3:獲取屬性
string property=property.getvalue(obj,null).tostring();
四:建構函式
constructorinfo ctor=type.getconstructor(new type)
呼叫建構函式
object obj=ctor.invoke(new object);
C 基礎 反射
反射指程式可以訪問 檢測和修改它本身狀態或行為的一種能力。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集 模組和型別的物件。您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性。優點 1 反射提高了程式的...
C 基礎 反射
記錄一下放射的一些東西把,之前都是學了記在筆記本上,現在整理上來,當作是複習和知新。反射的實現主要依賴於微軟提供的兩個命名空間 system.reflection 和system.type 兩個命名空間 反射 就是動態的獲取程式集,並獲取其中型別的元資料,然後訪問該型別的過程。可以在執行時 建立 訪...
C 基礎語法 反射
參考文獻 乙個執行的程式,檢視本身的元素或其他型別的元資料的行為叫做反射 mvc ioc orm aop 這些都用到反射。class baseclass class derivedclass baseclass static void main string args foreach var v i...