最近一直都在看關於程式集載入和反射方面的資料, 所以在這裡把我所學習到的東西記錄下來,方便自己以後複習,也給園子裡面不懂的朋友參考。
.net中反射在執行中過程中解析程式集中的元資料,獲得型別中的成員(包括字段、構造器、方法、屬性、事件等)資訊。
把下面的類放在乙個類庫工程中,並編譯生成程式集(例如為classlibrary1.dll,假設把dll放在d盤根目錄下面)
view code
1然後建立乙個控制台程式用來動態載入上面生成的程式集和輸出型別中的成員,**中有詳細的介紹。public
class
reflecttestclass28
set 9}
1011
public
intage
1214
set 15}
1617
///18
///no paramter constructor
19///
20public
reflecttestclass()
2123
24///
25///
constructor with parameter
26///
27///
28///
29public reflecttestclass(string names,int
ages)
3034
35public
string writestring(string
name)
3639
40public
static
string writename(string
name)
4144
45public
string
wirtenopara()
4649 }
class篩選返回的成員種類program
//用命名空間+類名獲取型別
typea = ass.gettype("
classlibrary1.reflecttestclass");
//獲得方法名稱
methodinfo method = typea.getmethod("
writestring");
//建立例項
obj = ass.createinstance("
classlibrary1.reflecttestclass");
string result = (string)method.invoke(obj,new
string );
console.writeline(
"invoke method with parameter");
console.writeline(
"-----------------------");
console.writeline(result);
console.writeline(
"-----------------------");
console.writeline();
method = typea.getmethod("
writename");
result = (string)method.invoke(null,new
string );
console.writeline(
"invoke static method with parameter");
console.writeline(
"-----------------------");
console.writeline(result);
console.writeline(
"-----------------------");
console.writeline();
method = typea.getmethod("
wirtenopara");
console.writeline(
"invoke method with noparameter");
result = (string)method.invoke(obj, null
); console.writeline(
"-----------------------");
console.writeline(result);
console.writeline(
"-----------------------");
}catch
(filenotfoundexception ex)
console.readline();
}//////
顯示陣列資訊
/// ///
///public
static
void showmessage(t array)
console.writeline(
"-----------------------");
console.writeline();}}
可以呼叫type的getmembers,getfields,getmethods,getproperties或者getevenents方法來查詢乙個型別的成員。在呼叫上面的任何乙個方法時,都可以傳遞system.reflection.bindingflags列舉型別的乙個例項,使用這個列舉型別目的是對這些方法返回的成員進行篩選。對於這個列舉型別中成員的資訊可以參考msdn:
注意:在返回乙個成員集合的所有方法中, 都有乙個不獲取任何實參的過載版本。如果不傳遞bindingflags實參,所有這些方法都返回公共成員,預設設定為bindingflags.public|bindingflags.instance|bindingflags.static. (如果指定public或nonpublic,那麼必須同時指定instance,否則不返回成員)。
程式集載入和反射
元資料表是用一系列字段表,方法表,型別定義表組成的。可以利用system.reflection命名空間中包含的型別,可以寫 來反射這些元資料表。具體的反射機制我是這樣理解的 首先應該清楚的了解到,system.reflection命名空間中的型別為程式集或模組中包含的換資料表提供了乙個物件模型 通過...
談談 程式集載入和反射
最近一直都在看關於程式集載入和反射方面的資料,所以在這裡把我所學習到的東西記錄下來,方便自己以後複習,也給園子裡面不懂的朋友參考。net中反射在執行中過程中解析程式集中的元資料,獲得型別中的成員 包括字段 構造器 方法 屬性 事件等 資訊。把下面的類放在乙個類庫工程中,並編譯生成程式集 例如為cla...
談談 程式集載入和反射
最近一直都在看關於程式集載入和反射方面的資料,所以在這裡把我所學習到的東西記錄下來,方便自己以後複習,也給園子裡面不懂的朋友參考。net中反射在執行中過程中解析程式集中的元資料,獲得型別中的成員 包括字段 構造器 方法 屬性 事件等 資訊。把下面的類放在乙個類庫工程中,並編譯生成程式集 例如為cla...