c 反射呼叫程式集方法 介面例項

2021-06-08 07:54:10 字數 3044 閱讀 5292

新建類庫: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 ...