概念反射:通過動態獲取程式集,並獲取其中的型別元資料,然後訪問該型別的過程。
在.net中,反射可以實現從物件的外部來了解物件或程式集內部結構的功能,哪怕不知道這個物件或程式集是什麼。
反射可以動態建立出物件並執行其中的方法。
反射是.net中的重要機制,通過反射,可以在執行時獲得程式或程式集中每乙個型別(包括類、結構、委託、介面、列舉等)的成員和成員的資訊。
有了反射,即可對每乙個型別瞭如指掌。還可以直接建立物件,即使這個物件的型別在編譯時還不知道。
新建類庫解決方案--->新增--->新建專案--->類庫(.net framework)
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace classlibrary1
public void method()}}
使用類庫(不使用反射機制)
using classlibrary1;
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace testcsharp
}}--->
建構函式
我的方法
使用反射新增命名空間:using system.reflection;
訪問類庫
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testcsharp
console.readkey();}}
}--->
classlibrary1.dll
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testcsharp
console.readkey();}}
}--->
classlibrary1.dll
獲得型別
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testcsharp
type mtype = assembly.gettype("classlibrary1.class1");
console.writeline(mtype.name);
console.readkey();}}
}--->
class1
class1
system.type類對於反射起著核心的作用。但它是乙個抽象的基類,type有與每種資料型別對應的派生類,使用不同派生類的物件的方法、字段、屬性等可以來查詢有關該型別的所有資訊。
獲取乙個給定型別的type的三種方式:
type t = typeof(string);
console.writeline(t);
--->
system.string
string s = "aaa";
type t = s.gettype();
console.writeline(t);
--->
system.string
type t = type.gettype("system.string");
console.writeline(t);
建立例項
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testcsharp
}}--->
建構函式
classlibrary1.class1
獲取方法並呼叫
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testcsharp
console.writeline("---------------------------------");
methodinfo method = mtype.getmethod("method");
method.invoke(obj, null);
console.readkey();}}
}--->
建構函式
void method()
system.string tostring()
boolean equals(system.object)
int32 gethashcode()
system.type gettype()
---------------------------------
我的方法
使用介面完成方法呼叫
新建類庫並建立乙個介面
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace classlibrary2
}
新增引用
實現繼承
using classlibrary2;
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace classlibrary1
public void method()}}
將下面檔案複製替換testcsharp資料夾中debug資料夾的同名檔案
完成呼叫
using classlibrary2;
using system;
using system.collections.generic;
using system.linq;
using system.reflection;
using system.text;
using system.threading.tasks;
namespace testcsharp
}}--->
建構函式
classlibrary1.class1
我的方法
第五十六象 己未
讖 曰者非鳥 潛者非魚 戰不在兵 造化遊戲 頌 曰海疆萬里盡雲煙 上迄雲霄下及泉 金母木公工幻弄 干戈未接禍連天 金聖嘆註解 此象軍用火,即亂不在兵之意。頌云,海疆萬里,則戰爭之烈,不僅在於中國也。推背 解圖兩個人對面而立,成對峙之態,手上都拿著 卻不使用,而是口中噴火,天上有兩隻鳥在飛,也呈對峙狀...
愛情五十六課,誰更嫉妒
小的時候,當媽媽去讚美別的孩子時,我們就已經學會了嫉妒。當我們愈是渴求乙個人的愛,愈是害怕失去這份愛時,嫉妒就愈發厲害。在長大的過程中,這種情緒的物件會遷移,從媽媽身上轉移到老師身上,或者同事 領導 密友 愛人身上,當他們顯示出對另乙個人更 偏愛 的姿態時,我們的尾巴就被踩得生疼,便要用嫉妒來表達自...
我的架構夢 (五十六) MongoDB架構
mongodb與mysql中的架構相差不多,底層都使用了可插拔的儲存引擎以滿足使用者的不同需要。用 戶可以根據程式的資料特徵選擇不同的儲存引擎,在最新版本的mongodb中使用了wiredtiger作為默 認的儲存引擎,wiredtiger提供了不同粒度的併發控制和壓縮機制,能夠為不同種類的應用提供...