//首先我們建立乙個類庫,將它生成為helloworld.dll,
using system;
using system.collections.generic;
using system.text;
namespace webtest
public class reflecttest : inte***ce1
set
private string writeb
set
public reflecttest()
public reflecttest(string str1, string str2)
public static string writename(string s)
public string writenopara()
private string writeprivate()
public int add()}}
//然後,建立再建立乙個專案引入該helloworld.dll,
using system;
using system.threading;
using system.reflection;
using webtest.webtest;
class test
module modules = t.getmodules();
console.writeline();
foreach (module module in modules)
type a = typeof(webtest.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.webtest.inte***ce1 obj1 = (webtest.webtest.inte***ce1)t.createinstance("webtest.reflecttest");
webtest.webtest.reflecttest obj2 = (webtest.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 反射例項
1 建立用於反射使用的dll 新建乙個c 類庫專案,拷貝源 如下,編譯生成dll 假如dll的檔名是testreflect.dll using system using system.collections.generic using system.text namespace webtest pu...
C 反射例項
c 反射的入門學習首先要明白c 反射提供了封裝程式集 模組和型別的物件等等。那麼這樣可以使用反射動態建立型別的例項,將型別繫結到現有物件,或從現有物件獲取型別並呼叫其方法或訪問其字段和屬性。如果 中使用了屬性,可以利用反射對它們進行訪問。msdn描述 反射通常具有以下用途 使用 assembly 定...
GO反射類例項
型別資訊 是靜態的元資訊,是預先定義好的 值資訊 是程式執行過程中動態改變的 獲取型別資訊 reflect.typeof,是靜態的 獲取值資訊 reflect.valueof,是動態的 反射獲取inte ce值資訊 package main import fmt reflect 反射獲取inte c...