反射技術繼續

2021-06-16 05:23:52 字數 1181 閱讀 8347

假設另乙個工程中的所有類都編譯到乙個dll檔案中了,在這很多的類當中,有乙個類叫stringutil,命名空間在hsmp.commonbasic.common下

該類中有乙個方法:

public   double   getsum(double   x,double   y)

編譯後dll檔案的存放路徑是:d:/test/hsmp.commonbasic.dll

現在的問題是,如何通過程式呼叫該dll檔案中的getsum方法

大概有以下幾步:

using   system.reflection;

a. //這裡要用loadfrom,只有在本工程裡新增了該dll的引用後才可以使用load

assembly   objass   =   assembly.loadfrom(@ "d:/test/hsmp.commonbasic.dll ");

類的全路徑

type   t=objass.gettype( "hsmp.commonbasic.common.stringutil ");  

//動態生成類stringutil的例項

object   obj=system.activator.createinstance(t);

//引數資訊,getsum需要兩個int引數,如果方法沒有引數,就宣告乙個長度為0的陣列

system.type   paramtypes   =   new   system.type[2];

paramtypes[0]   =   system.type.gettype( "system.int32 ");

paramtypes[1]   =   system.type.gettype( "system.int32 ");

//找到對應的方法

methodinfo   p   =   t.getmethod( "getsum ",   paramtypes)

//引數值,如果所呼叫的方法沒有引數,不用寫這些

object   parameters   =   new   object[2];

parameters[0]   =   3;

parameters[1]   =   4;

object   objretval   =   p.invoke(obj,   parameters);   //如果沒有引數,寫null即可。

System Reflection 反射技術例項

專案結構 reflectionexample.csproj helloworld.cs program.cs 源 helloworld.cs using system using system.collections.generic using system.text namespace refle...

C 反射技術應用

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

c 高階技術 反射

反射?難道是物理中光的反射?no no no 這個 反射 和物理一點關係都沒有!那什麼是反射呢?我個人的理解是 在程式中 動態的新增程式的功能 新增dll檔案 無需在源 中新增 從而實現為程式的功能 公升級 說的有些官方了 下面我舉幾個例子 我們都玩過遊戲 就拿我以前玩的qq飛車來說 遊戲廠商會隔一...