C 反射Assembly 具體說明

2021-09-08 10:30:28 字數 4599 閱讀 8344

1、對c#反射機制的理解

2、概念理解後,必須找到方法去完畢,給出管理的主要語法

3、終於給出有用的樣例,反射出來dll中的方法

反射是乙個程式集發現及執行的過程,通過反射能夠得到*.exe或*.dll等程式集內部的資訊。使用反射能夠看到乙個程式集內部的介面、類、方法、字段、屬性、特性等等資訊。在system.reflection命名空間內包括多個反射經常使用的類,以下**列出了經常使用的幾個類。

型別 作用

assembly 通過此類能夠載入操縱乙個程式集,並獲取程式集內部資訊

eventinfo 該類儲存給定的事件資訊

fieldinfo 該類儲存給定的字段資訊

methodinfo 該類儲存給定的方法資訊

memberinfo 該類是乙個基類,它定義了eventinfo、fieldinfo、methodinfo、propertyinfo的多個公用行為

module 該類能夠使你能訪問多個程式集中的給定模組

parameterinfo 該類儲存給定的引數資訊      

propertyinfo 該類儲存給定的屬性資訊

一、system.reflection.assembly類

通過assembly能夠動態引導程式集,並檢視程式集的內部資訊,當中最經常使用的就是load()這種方法。

assembly assembly=assembly.load("myassembly");

利用assembly的object createinstance(string) 方法能夠反射建立乙個物件,引數0為類名。

二、system.type類

type是最經常使用到的類,通過type能夠得到乙個類的內部資訊,也能夠通過它反射建立乙個物件。一般有三個經常使用的方法可得到type物件。

利用typeof() 得到type物件

type type=typeof(example);

利用system.object.gettype() 得到type物件

example example=new example();

type type=example.gettype();

利用system.type.gettype() 得到type物件

type type=type.gettype("myassembly.example",false,true);

注意引數0是類名,引數1表示若找不到相應類時是否丟擲異常,引數1表示類名是否區分大寫和小寫

樣例:我們最常見的是利用反射與activator結合來建立物件。

assembly assembly= assembly.load("myassembly");

type type=assembly.gettype("example");

object obj=activator.createinstance(type);

三、反射方法

1.通過 system.reflection.methodinfo能查詢到類裡面的方法

type type=typeof(example);

methodinfo listmethodinfo=type.getmethods();

foreach(methodinfo methodinfo in listmethodinfo)

cosole.writeline("method name is "+methodinfo.name);

2.我們也能通過反射方法執行類裡面的方法2.我們也能通過反射方法執行類裡面的方法

assembly assembly= assembly.load("myassembly");

type type=assembly.gettype("example");

object obj=activator.createinstance(type);

methodinfo methodinfo=type.getmethod("hello world"); //依據方法名獲取methodinfo物件

methodinfo.invoke(obj,null); //引數1型別為object,代表hello world方法的相應引數,輸入值為null代表沒有引數

四、反射屬性

1.通過 system.reflection.propertyinfo 能查詢到類裡面的屬性

經常使用的方法有getvalue(object,object) 獲取屬性值和 setvalue(object,object,object) 設定屬性值

四、反射屬性

1.通過 system.reflection.propertyinfo 能查詢到類裡面的屬性

經常使用的方法有getvalue(object,object) 獲取屬性值和 setvalue(object,object,object) 設定屬性值

四、反射屬性

1.通過 system.reflection.propertyinfo 能查詢到類裡面的屬性

經常使用的方法有getvalue(object,object) 獲取屬性值和 setvalue(object,object,object) 設定屬性值

type type=typeof(example);

propertyinfo listpropertyinfo=type.getproperties();

foreach(propertyinfo propertyinfo in listpropertyinfo)

cosole.writeline("property name is "+ propertyinfo.name);

2.我們也能夠通過下面方法設定或者獲取乙個物件的屬性值2.我們也能夠通過下面方法設定或者獲取乙個物件的屬性值

assembly assembly=assembly.load("myassembly");

type type=assembly.gettype("example");

object obj=activator.createinstance(type);

propertyinfo propertyinfo=obj.getproperty("name"); //獲取name屬性物件

var name=propertyinfo.getvalue(obj,null); //獲取name屬性的值

propertyinfo propertyinfo2=obj.getproperty("age"); //獲取age屬性物件

propertyinfo.setvalue(obj,34,null); //把age屬性設定為34

五、反射字段

通過 system.reflection.fieldinfo 能查詢到類裡面的字段

它包含有兩個經常用法setvalue(object ,object )和getvalue(object)  由於用法與反射屬性很相似,在此不再多作介紹

(略)六、反射特性

通過system.reflection.memberinfo的getcustomattributes(type,bool)就可反射出乙個類裡面的特性,下面樣例能夠反射出乙個類的全部特性

五、反射字段

通過 system.reflection.fieldinfo 能查詢到類裡面的字段

它包含有兩個經常用法setvalue(object ,object )和getvalue(object)  由於用法與反射屬性很相似,在此不再多作介紹

(略)六、反射特性

通過system.reflection.memberinfo的getcustomattributes(type,bool)就可反射出乙個類裡面的特性,下面樣例能夠反射出乙個類的全部特性

type type=typeof("example");

object typeattributes=type.getcustomattributes(false); //獲取example類的特性

foreach(object attribute in typeattributes)

console.writeline("attributes description is "+attribute.tostring());

通過以下樣例,能夠獲取example類name屬性的全部特性通過以下樣例,能夠獲取example類name屬性的全部特性

public class example

..................

}type type = typeof(example);

propertyinfo propertyinfo=type.getproperty("name"); //獲取example類的name屬性

foreach (object attribute in propertyinfo.getcustomattributes(false)) //遍歷name屬性的全部特性

console.writeline(「property attribute: "+attribute.tostring());

總結:總結:

C 反射Assembly 具體說明

1 對c 反射機制的理解 2 概念理解後,必須找到方法去完畢,給出管理的主要語法 3 終於給出有用的樣例,反射出來dll中的方法 反射是乙個程式集發現及執行的過程,通過反射能夠得到 exe或 dll等程式集內部的資訊。使用反射能夠看到乙個程式集內部的介面 類 方法 字段 屬性 特性等等資訊。在sys...

C 反射Assembly 詳細說明,有專案例子

1 對c 反射機制的理解 2 概念理解後,必須找到方法去完成,給出管理的主要語法 3 最終給出實用的例子,反射出來dll中的方法 反射是乙個程式集發現及執行的過程,通過反射可以得到 exe或 dll等程式集內部的資訊。使用反射可以看到乙個程式集內部的介面 類 方法 字段 屬性 特性等等資訊。在sys...

C 反射的Assembly的簡單應用

反射 reflection 是.net中的重要機制,通過反射,可以在執行時獲得.net中每乙個型別 包括類 結構 委託 介面和列舉等 的成員,包括方法 屬性 事件,以及建構函式等。還可以獲得每個成員的名稱 限定符和引數等。有了反射,即可對每乙個型別瞭如指掌。如果獲得了建構函式的資訊,即可直接建立物件...