參考文獻
乙個執行的程式,檢視本身的元素或其他型別的元資料的行為叫做反射
mvc、ioc、orm、aop 這些都用到反射。
class
baseclass
class
derivedclass
:baseclass
輸出結果:static
void
main
(string
args)
;foreach
(var v in bca)")
; fieldinfo[
] fi = t.
getfields()
;foreach
(var f in fi)")
;}console.
writeline();}}
object type:baseclassfile :basefield
object type:derivedclass成員成員型別file :derviedfield
file :basefield
描述name
屬性返回型別的名字
namespace
屬性返回型別的命名空間
assembly
屬性返回宣告型別的資料集
getfields
方法返回型別的字段列表
getproperties
方法返回型別的屬性列表
getmethods
方法返回型別的方法列表
4.1 dll 檔案的讀取
4.2 具體的例子通過程式集名稱返回assembly物件
assembly ass = assembly.
load
("classlibrary831");
通過dll檔名稱返回assembly物件
assembly ass = assembly.
loadfrom
("classlibrary831.dll");
通過assembly獲取程式集中類
type t = ass.
gettype
("classlibrary831.newclass");
//引數必須是類的全名
通過assembly獲取程式集中所有的類
type[
] t = ass.
gettypes()
;
1. 目錄結構
2.**
[1]static
void
main
(string
args)
{// 載入 dll 檔案
// 這個是直接動態載入
assembly assembly = assembly.
load
("liba");
// 和上面的區別是這個得用 dll 檔案
assembly assembly1 = assembly.
loadfrom
("liba.dll");
// 用絕對路徑引入
assembly assembly2 = assembly.
loadfile()
;var tpye = assembly2;
console.
writeline
(tpye.fullname)
;// 獲取型別(這一步要在獲得 dll 檔案的基礎上進行)
type type = assembly.
gettype
("liba.class1");
object o = activator.
createinstance
(type)
;// 必須是個type型別,簡單點說,必須是個類。
console.
writeline
(type.name)
;// 用介面做強制規範,然他能 「點「 出來
iaclasscs rel = type as iaclasscs;
rel.
getname()
;//object mm = activator.createinstance(type);
[2]
C 基礎 反射
反射指程式可以訪問 檢測和修改它本身狀態或行為的一種能力。程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集 模組和型別的物件。您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,可以呼叫型別的方法或訪問其字段和屬性。優點 1 反射提高了程式的...
C 基礎 反射
反射的實現主要依賴於微軟提供的兩個命名空間 system.reflection 和system.type 兩個命名空間 反射 就是動態的獲取程式集,並獲取其中型別的元資料,然後訪問該型別的過程。可以在執行時 建立 訪問 呼叫 型別。反射在實際應用中通常被用於 深複製實現,資料庫datatable 轉...
C 基礎 反射
記錄一下放射的一些東西把,之前都是學了記在筆記本上,現在整理上來,當作是複習和知新。反射的實現主要依賴於微軟提供的兩個命名空間 system.reflection 和system.type 兩個命名空間 反射 就是動態的獲取程式集,並獲取其中型別的元資料,然後訪問該型別的過程。可以在執行時 建立 訪...