C 反射例項 一 利用反射使用類庫

2021-09-08 06:44:07 字數 3254 閱讀 8754

//首先我們建立乙個類庫,將它生成為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...