新建類庫:webtest
新增相應類:reflecttest 介面inte***ce1
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace webtest
public class reflecttest : inte***ce1
setprivate string writeb
setpublic reflecttest()
public reflecttest(string str1, string str2)
public static string writename(string s)
public string writenopara()
private string writeprivate()
public int add()}}
新建測試控制台專案,並新增引用
using system;
using system.reflection;
namespace test
module modules = t.getmodules();
console.writeline();
foreach (module module in modules)
type a = typeof(webtest.reflecttest);//得到具體的類的型別,和下面乙個效果
//type a = t.gettype("webtest.reflecttest");
"模組裡的類有:" + a.name + "/n");
string bb = ;
object obj = activator.createinstance(a, bb); //建立該類的例項,後面的bb為有參建構函式的引數
//object obj = t.createinstance("webtest.reflecttest");//與上面方法相同
//獲得例項公共方法的集合
methodinfo miarr = a.getmethods();
console.write("/n共有方法: /n");
foreach (methodinfo mi0 in miarr)
methodinfo mi = a.getmethod("writestring");//顯示具體的方法
object aa = ;
string s = (string)mi.invoke(obj, aa); //帶引數方法的呼叫
methodinfo mi1 = a.getmethod("writename");
string aa1 = ;
string s1 = (string)mi1.invoke(null, aa1); //靜態方法的呼叫
methodinfo mi2 = a.getmethod("writenopara");
string s2 = (string)mi2.invoke(obj, null); //不帶引數的方法呼叫
methodinfo mi3 = a.getmethod("writeprivate", bindingflags.instance | bindingflags.nonpublic);
string s3 = (string)mi3.invoke(obj, null); //私有型別方法呼叫
s3);
//獲得例項公共屬性的集合
propertyinfo piarr = a.getproperties(bindingflags.instance | bindingflags.nonpublic | bindingflags.public);
console.writeline("/n顯示所有的屬性:");
foreach (propertyinfo pi in piarr)
propertyinfo pi1 = a.getproperty("writea");
"writea", null);
pi1.getvalue(obj,null));
propertyinfo pi2 = a.getproperty("writeb", bindingflags.instance | bindingflags.nonpublic | bindingflags.public);
pi2.setvalue(obj, "writeb", null);
pi2.getvalue(obj, null));
fieldinfo fi1 = a.getfield("write");
fi1.getvalue(obj));
//獲得例項公共建構函式的集合
constructorinfo ci1 = a.getconstructors();
console.writeline("/n顯示所有的建構函式:");
foreach (constructorinfo ci in ci1)
//constructorinfo asci = a.getconstructor(new type );
asci.tostring());
webtest.inte***ce1 obj1 = (webtest.inte***ce1)t.createinstance("webtest.reflecttest");
webtest.reflecttest obj2 = (webtest.reflecttest)t.createinstance("webtest.reflecttest");
obj1.add());典型的工廠模式
foreach (type tt in t.gettypes())
}testdelegate method = (testdelegate)delegate.createdelegate(typeof(testdelegate), obj, "writestring");
//動態建立委託的簡單例子
console.write(method("str1", 2));
console.read();}}
}
C 反射呼叫程式集類中方法
建立類 class operatorclass 減法 public static int subtract int x,int y 乘法 public int mulitiple int x,int y 除法 public int divide int x,int y return x y 取餘數求...
關於c 呼叫DLL的方法,介面,類
我現在有乙個沒有原始碼的dll,想在c 的工程裡呼叫,這個dll的使用方法是首先建立乙個物件,然後呼叫這個物件公開的介面來使用,但現在不知道怎麼在c 裡宣告這個介面,如果是com的話,可以通guid來指定,但沒有guid,應該怎麼辦呢?如果是com,註冊後直接引用,然後再定義相關物件就行 自定義屬性...
C 抽象方法 虛方法 介面
抽象方法和虛方法都可以寫在抽象類中,它們有什麼區別呢?接下來就讓我帶你分析一下吧。一 virtual方法 虛方法 virtual 關鍵字用於在基類中修飾方法,它有兩種情況 1 在基類中定義virtual方法,但在派生類中沒有重寫該虛方法。那麼在堆派生類例項呼叫中,該虛方法使用的是基類定義的方法。2 ...